第五題:
基本思路:將a段中的資料複製到c中,然後用b中的資料與c段相加(add c, b)。
需要注意一下幾點:
資料型別是:位元組型的,暫存器只能用類似於al、ah之類的;
直接將資料中乙個段存到另乙個段中是不可行的,類似於:mov es:[bx], ds[bx],應該要借助於暫存器。
1 assume cs:輸出結果:codesg
2a segment
3 db 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8
4a ends
5b segment
6 db 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8
7b ends
8result segment
9 db 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
10result ends
11codesg segment
12start:
13mov
ax, a
14mov
ds, ax
15mov
ax, result
16mov
es, ax
1718
mov bx, 0
19mov cx, 8
20s1:
21mov
al, [bx]
22mov
es:[bx], al
23inc
bx24
loop s1
2526
mov ax, b ;
change ds to segment b
27mov
ds, ax
2829
mov bx, 0
30mov cx, 8
31s2:
32mov
al, [bx]
33add
es:[bx], al
34inc
bx35
loop s2
3637
movax, 4c00h
38int
21h
3940
codesg ends
4142 end start
基本思路:將段b作為stack段,a段作為data段。一次將a段中前8個字push到棧中(b段)。
需要注意的地方:
資料型別是字型,即2個位元組;
注意初始化暫存器sp,即計算b段長度:2*8;
雖然利用mov直接將資料中乙個段存到另乙個段中是不可行的,但是push卻可以,例如:push ds:[bx],該過程用mov表達即(注:可能無法編譯):mov ds:[bx], ss:[sp];
1輸出結果:assume cs : codesg
2a segment
3 dw 1, 2, 3, 4, 5, 6, 7, 8, 9
, 0ah, 0bh, 0ch, 0dh, 0eh, 0fh, 0ffh
4a ends
5b segment
6 dw 0, 0, 0, 0, 0, 0, 0, 0
7b ends89
codesg segment
10start:
11mov ax, a ;
data segment
12mov
ds, ax
13mov ax, b ;
stack segment
14mov
ss, ax
15mov
sp, 10h
1617
mov bx, 0
18mov cx, 8
19beg:20;
mov ax, ds:[bx]21;
push ax
22push
ds:[bx]
23add bx, 2
24loop beg
2526
movax, 4c00h
27int
21h28
codesg ends
2930 end start
後記:由於開始時不知道push預設的運算元據長度(16位),而過於小心使用了如下方法push字型資料
mov ax, ds:[bx]
push ax
後來改為:
push ds:[bx]
輸出的結果是一樣的。
王爽彙編第二版實驗5
1 assume cs code,ds data,ss stack data segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data ends stack segment dw 0,0,0,0,0,0,0,0 stack end...
王爽彙編第二版實驗4
1 程式設計,向記憶體0 200 0 23f依次傳送資料0 63.assume cs code code segment start mov ax,0020h mov ds,ax mov bx,0 mov cx,40h s mov bx bx inc bx 每次移動一位,覆蓋高位,保留低位 loop...
組合語言 《組合語言》王爽 實驗一
從 1000 0 開始寫入命令 a 1000 0 mov ax,4e20 add ax,1416 mov bx,2000 add ax,bx mov bx,ax add ax,bx mov ax,001a mov bx,0026 add al,bl add ah,bl add bh,al mov a...