• 汇编实验七(王爽)


    最开始写的有很多循环的(容易理解,但复杂性高)

    assume cs:code,ss:stack
    
    data segment
        db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
        db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
        db '1993','1994','1995'
    
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
        dw 11542,14430,15257,17800
    data ends
    
    table segment
        db 21 dup('year summ ne ?? ')
    table ends
    
    stack segment
        dw 0,0,0,0,0,0,0,0
    stack ends
    
    code segment
    start: mov ax,data
           mov ds,ax
           mov ax,table
           mov es,ax
           mov ax,stack
           mov ss,ax
           mov sp,10h
           mov bx,0
           mov bp,0
           mov cx,21
         s:push cx
           mov si,0
           mov cx,4
        s0:mov al,[bx+si]
           mov es:[bp+si],al
           inc si
           loop s0
           mov al,' '
           mov es:[bp+si+1],al
    
           add bx,4
           add bp,16
           pop cx
           loop s
    
            mov bx,84
            mov bp,5
            mov cx,21
         s1:mov ax,ds:[bx]
            mov dx,ds:[bx+2]
            mov es:[bp],ax
            mov es:[bp+2],dx
           mov al,' '
           mov es:[bp+4],al        
    
            add bx,4
            add bp,16
            loop s1
    
            mov bx,168
            mov bp,10
            mov cx,21
         s2:mov ax,ds:[bx]
            mov es:[bp],ax
            mov al,' '
            mov es:[bp+2],ax
    
            add bx,2
            add bp,16
            loop s2
    
            mov bx,84
            mov si,168
            mov bp,13
            mov cx,21
         s3:mov ax,ds:[bx]
            mov dx,ds:[bx+2]
            div word ptr ds:[si]
            mov es:[bp],ax
            mov al,' '
            mov es:[bp+2],al
    
            add si,2
            add bx,4
            add bp,16
            loop s3
    
            mov ax,4c00h
            int 21h
    
    code ends
    
    end start

    运行结果如下

     修改后,只剩下一个循环,代码复制性减少了很多

    assume cs:code,ss:stack
    
    data segment
        db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
        db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
        db '1993','1994','1995'
    
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
        dw 11542,14430,15257,17800
    data ends
    
    table segment
        db 21 dup('year summ ne ?? ')
    table ends
    
    stack segment
        dw 0,0,0,0,0,0,0,0
    stack ends
    
    code segment
    start: mov ax,data
           mov ds,ax
           mov ax,table
           mov es,ax
           mov ax,stack
           mov ss,ax
           mov sp,10h
           mov bx,0
           mov bp,0
           mov si,0
           mov cx,21
    
         s:mov ax,ds:[bx]
           mov es:[bp],ax
           mov ax,ds:[bx+2]
           mov es:[bp+2],ax
           mov al,' '
           mov es:[bp+4],al
    
           
            mov ax,ds:[bx+84]
            mov dx,ds:[bx+84+2]
            mov es:[bp+5],ax
            mov es:[bp+7],dx
            mov al,' '
            mov es:[bp+9],al        
    
          
            mov ax,ds:[si+168]
            mov es:[bp+10],ax
            mov al,' '
            mov es:[bp+12],ax
    
           
            mov ax,ds:[bx+84]
            mov dx,ds:[bx+84+2]
            div word ptr ds:[si+168]
            mov es:[bp+13],ax
            mov al,' '
            mov es:[bp+15],al
    
            add bp,16      //->用来表示table表内的内存偏移地址(用来控制table表的行数,以及间接地表示内存偏移地址)
            add bx,4       //->用来表示dd性与字符串型数据的偏移地址(每读取一段数据后,需移动四个字节
            add si,2       //->>用来表示dw性数据的偏移地址(每读取一段数据后,只需移动两个字节)
            loop s
    
            mov ax,4c00h
            int 21h
    
    code ends
    
    end start

    运行结果如下:

  • 相关阅读:
    数组模拟队列实现
    Vue之模板语法
    初识Vue之helloworld
    二、Lambda表达式
    一、函数式编程
    SpringCloudAlibaba之Nacos
    SpringCloudAlibaba之Sentinel
    spring的随笔2
    spring的小想法1
    关于hibernate的一些看法
  • 原文地址:https://www.cnblogs.com/jane315/p/12878413.html
Copyright © 2020-2023  润新知