-
其中有四個部分,分別是 A、B、C 和 Code。
區段 a、b 和 c 都可以視為資料區段。
開始這樣寫。
mov ax,a
mov es,ax
mov ax,c
mov ds,ax
將A段和B段的結果相加,最後放在C段中。
====所有程式如下***************==假設cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:mov ax,a
mov es,ax
mov ax,c
mov ds,ax
mov bx,0
mov cx,8
s1:mov ax,es:[bx]
add [bx],ax
add bx,2
loop s1
mov ax,b
mov es,ax
mov ds,ax
mov bx,0
mov cx,8
s2:mov ax,es:[bx]
add [bx],ax
add bx,2
loop s2
mov ax,4c00h
int 21h
code ends
end start
-
兩個週期的次數都應該是 4 而不是 8,所以 mov cx,8 應該改為 mov cx,4
-
為什麼圖片無法上傳?
-
CPU執行指令的起始位置由CS:IP確認,初始CS=2000H,IP=0
即:mov ax,6622h cs=2000h ip=0003hjmp 0ff0,0100 cs=0ff0h ip=0100h; JMP 命令修改 CS 和 IP 暫存器的值。 您將被定向到的位址是:
0ff0h*16+0100h=10000h
mov ax,2000h cs=0ff0h ip=0103hmov ds,ax cs=0ff0h ip=0105hmov ax,[0008] cs=0ff0h ip=0108hmov ax,[0002] cs=0ff0h ip=010bh當沒有跳轉命令時,ip的值始終指向下乙個命令的位置。 也就是說,下乙個IP位址的值是當前IP值+當前指令長度。
理解了這一點,以上都不是問題。
組合語言可以說是機器語言,直接與硬體打交道的是將計算機語言轉化為機器可以識別的1001。 它不會過時,至少在這十年內不會。 不過,這主要是關於硬體方面。 >>>More
後一條指令是div bx,表示你正在做16位除法,那麼預設被除數是[dx,ax],其中dx是被除數較高的16位,ax是被除數的較低16位,其實你的被除數只儲存在ax中,那麼被除數的高位應該清零, 例如,如果你想計算 72 8,但被除數必須是 4 位數字,那麼你的被除數應該寫成 0072 嗎? >>>More