1. 程式人生 > 其它 >王爽老師《組合語言》實驗7程式碼

王爽老師《組合語言》實驗7程式碼

王爽老師《組合語言》pdf下載

感覺自己真的菜,整半天沒整出來

assume cs:code,ds:data

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'
  ;年份(0~53H)
  dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  ;總收入(54H~A7H)
  dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  dw 11542,14430,15257,17800
  ;員工數(A8H~D1H)
data ends

table segment
        db 21 dup('year summ ne ?? ')
table ends
assume cs:code,ds:data

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'
  ;年份(0~53H)
  dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  ;總收入(54H~A7H)
  dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  dw 11542,14430,15257,17800
  ;員工數(A8H~D1H)
data ends

table segment
        db 21 dup('year summ ne ?? ')
table ends

code segment
start:                  mov ax, data   ;設定資料段暫存器
                        mov ds, ax      
                        mov ax, table  ;設定擴充套件段暫存器
                        mov es, ax      
                        
                        mov bx, 0      ;初始化
                        mov si, 0
                        mov di, 0
                        mov cx, 21
                        
                s:      mov ax, [bx]         ; 寫入年份資料,可以以字為單位操作,減少指令數量,發揮16位機優勢
                        mov es:[di],ax
                        mov ax, [bx+2]
                        mov es:[di+2], ax
                        
                        mov ax,54h[bx]    ; 寫入總收入資料
                        mov dx,56h[bx]
                        mov es:5h[di], ax
                        mov es:7h[di],dx
                        
                        div word ptr ds:0A8h[si]  ;計算並存儲人均收入。由於總收入資料已經在ax, 和dx中了,所以將這一步提前,可以減少資料讀取
                        mov es:0Dh[di], ax
                        
                        mov ax, 0A8h[si]  ; 寫入人員數量資料
                        mov es:0Ah[di], ax
                                                        
                        add si, 2    ;下一組成員數偏移地址
                        add bx, 4   ;下一組年份和總收入偏移地址
                        add di, 16  ;表格下一行
                        loop s
                        
                        mov ax, 4c00h ;程式退出
                        int 21h

code ends

end start

從 code segment 開始就是要編寫的程式碼