《匯編語言第二版——王爽》實驗五,5、6題


第五題:

 基本思路:將a段中的數據復制到c中,然后用b中的數據與c段相加(add c, b)。

需要注意一下幾點:

  1. 數據類型是:字節型的,寄存器只能用類似於al、ah之類的;
  2. 直接將數據中一個段存到另一個段中是不可行的,類似於:mov es:[bx], ds[bx],應該要借助於寄存器。

 

 1 assume cs:codesg
 2 a segment
 3     db 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8
 4 a ends
 5 b segment
 6     db 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8
 7 b ends
 8 result segment
 9     db 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
10 result ends
11 codesg segment
12 start:
13     mov ax, a
14     mov ds, ax
15     mov ax, result
16     mov es, ax
17     
18     mov bx, 0
19     mov cx, 8
20     s1:
21         mov al, [bx]
22         mov es:[bx], al
23         inc bx
24     loop s1
25     
26     mov ax, b    ;change ds to segment b
27     mov ds, ax
28     
29     mov bx, 0
30     mov cx, 8
31     s2:
32         mov al, [bx]
33         add es:[bx], al
34         inc bx
35     loop s2
36     
37     mov ax, 4c00H
38     int 21H    
39     
40 codesg ends
41 
42 end start

 輸出結果:

 

第六題:

基本思路:將段b作為stack段,a段作為data段。一次將a段中前8個字push到棧中(b段)。

需要注意的地方:

  1. 數據類型是字型,即2個字節;
  2. 注意初始化寄存器sp,即計算b段長度:2*8;
  3. 雖然利用mov直接將數據中一個段存到另一個段中是不可行的,但是push卻可以,例如:push ds:[bx],該過程用mov表達即(注:可能無法編譯):mov ds:[bx], ss:[sp];
 1 assume cs : codesg
 2 a segment
 3     dw 1, 2, 3, 4, 5, 6, 7, 8, 9, 0ah, 0bh, 0ch, 0dh, 0eh, 0fh, 0ffh
 4 a ends
 5 b segment
 6     dw 0, 0, 0, 0, 0, 0, 0, 0
 7 b ends
 8 
 9 codesg segment
10 start:
11     mov ax, a    ; data segment
12     mov ds, ax
13     mov ax, b    ; stack segment
14     mov ss, ax
15     mov sp, 10H
16     
17     mov bx, 0
18     mov cx, 8
19     beg:
20         ;mov ax, ds:[bx]
21         ;push ax
22         push ds:[bx]
23         add bx, 2
24     loop beg
25     
26     mov ax, 4c00H
27     int 21H
28 codesg ends
29 
30 end start

 輸出結果:

后記:由於開始時不知道push默認的操作數據長度(16位),而過於小心使用了如下方法push字型數據

mov ax, ds:[bx]

push ax

后來改為:

push ds:[bx]

輸出的結果是一樣的。


免責聲明!

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



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