《匯編語言》王爽——實驗7


 

 1 assume cs:code, ds:data, es:table, ss:stacks  2 
 3 data segment  4     ;年份
 5     db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983'
 6     db '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992'
 7     db '1993', '1994', '1995'
 8     ;收入
 9     dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
10     dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
11     ;員工
12     dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
13     dw 11542, 14430, 15257, 17800
14 data ends 15 
16 table segment 17     db 21 dup ('year sumn ne ?? ') 18 table ends 19 
20 stacks segment 21     dw 0, 0, 0, 0
22 stacks ends 23 
24 code segment 25 start:
26     mov ax, data 27     mov ds, ax ;設置DS的段地址
28     mov ax, table 29     mov es, ax ;設置ES的段地址指向table
30     mov ax, stacks 31     mov ss, ax ;設置SS的段地址
32     mov sp, 8 ;設置SP的棧頂指針
33     mov si, 0
34     mov di, 0
35     mov cx, 21 ;設置最外層的循環次數為21次
36     s:
37     push cx ;利用棧來保護最外層的循環
38     mov cx, 2 ;設置年份和收入的循環次數為2次,因為數據結構邏輯上一樣,所以可以在一次循環中同時處理
39     mov bx, 0
40     s1:
41     mov ax, ds:[0+si+bx] ;0看作是數據段中年份的起始地址
42     mov es:[0+di+bx], ax ;0看作是table段中年份的起始地址
43     mov ax, ds:[84+si+bx] ;84看作是數據段中收入的起始地址
44     mov es:[5+di+bx], ax ;5看作是table段中收入的起始地址
45     add bx, 2
46  loop s1 47     add si, bx ;讓si來記錄走過的字節數,保證在修改table段中的下一行時數據是正確的
48     push si ;想讓si同時也處理員工的數據 
49     
50     mov ax, si ;處理員工的數據
51     mov dl, 2 
52     div dl ;因為年份和收入處理時字節長度相同,而員工是它們的一半,所以讓si/2后再減2
53     mov si, ax 54     sub si, 2 ;減2就可以對應到數據段員工的數據
55     mov ax, ds:[168+si] ;168看作是數據段中員工的起始地址
56     mov es:[10+di], ax ;10看作是table段中員工的起始地址
57     pop si ;把si真正的值還原回去,保證下次年份和收入能正常處理
58     
59     ;處理人均收入的數據
60     mov dx, es:[7+di];被除數的高位
61     mov ax, es:[5+di] ;被除數的低位
62     div word ptr es:[10+di] ;平均收入
63     mov es:[13+di], ax 64     
65     add di, 16
66     pop cx 67  loop s 68     
69     mov ax, 4C00H 70     int 21H 71 code ends 72 
73 end start

本人最近剛開始學匯編語言,以上代碼是按照我自己的理解寫的,可能不夠優化,若有疑問請評論指正,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM