(1)在上面內容中,我們用7ch中斷例程實現loop功能,則上面的7ch中斷例程所能進行的最大轉移位移是多少?
答案:題目描述個人感覺有二義性,因此從loop實現角度和位移值bx變數兩方面來討論
如果從loop的指令角度上看,loop是段內短轉移,它的範圍是-128~127,也就是說最大轉移位移是128.
如果從bx變數來說,bx儲存二進位制補碼資料的表示範圍。對於16位來說它表示的範圍是-32768~32767。
我們知道在記憶體中是按照計算機補碼方式儲存的,最小的負數(也就是絕對值最大的數)是8000h也就是-32768,那麼它最大的轉移位移是32768。
(2)用7ch中斷例程完成jmp near ptr s指令功能,用bx向中斷例程傳送轉移位移。
應用舉例:在螢幕的第12行,顯示data段中以0結尾的字串。
assume cs:code
data segment
db 'conversation', 0
data ends
code segment
start: mov ax, data
mov ds, ax
mov si, 0
mov ax, 0b800h
mov es, ax
mov di, 12*160
s:cmp byte ptr [si], 0
je ok
mov al, [si]
mov es:[di], al
mov ah, 2
mov es:[di + 1], ah
inc si
add di, 2
mov bx, offset s - offset ok
int 7ch
ok:mov ax, 4c00h
int 21h
code ends
end start
根據題目要求,7ch的處理程式如下:
lp:push bp
mov bp, sp
add [bp+2], bx
pop bp
iret
lpend:nop
原始碼如下:
assume cs:code
data segment
db 'conversation', 0
data ends
code segment
start:mov ax, cs
mov ds, ax
mov si, offset lp
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset lpend - offset lp
cld ;傳輸方向為正
rep movsb ;位元組傳輸
;設定7ch到中斷向量表
mov ax, 0
mov es, ax
mov word ptr es:[7ch*4], 200h
mov word ptr es:[7ch*4 + 2], 0
mov ax, data
mov ds, ax
mov si, 0
mov ax, 0b800h
mov es, ax
mov di, 12*160
s:cmp byte ptr [si], 0
je ok
mov al, [si]
mov es:[di], al
mov ah, 2 ;這裡是為了便於觀察程式執行結果
mov es:[di + 1], ah
inc si
add di, 2
mov bx, offset s - offset ok
int 7ch
ok:mov ax, 4c00h
int 21h
lp:push bp
mov bp, sp
add [bp+2], bx
pop bp
iret
lpend:nop
code ends
end start
程式執行如下:
題目主要考察對於比較指令cmp的理解使用和對段內近轉移jmp near ptr s指令的掌握情況
王爽《組合語言(第三版)》檢測點11 1
寫出下面每條指令執行後,zf pf sf等標誌位的值。指令sub al,al mov al,1 push ax pop bx add al,bl add al,10 mul al zf 0 pf 偶 sf 負 zf標誌 是否為0 pf標誌 結果中是否有偶數個為1的bit位。sf標誌 結果是否為負,僅...
王爽彙編 第三版 檢測點 11 2
首先補充一些知識 cf carry flag 進製標誌位 of overflow flag 溢位標誌位 sf sign flag 負數標誌位 zf zero flag 零標誌位 pf parity 奇偶標誌位 cf是對無符號數進行運算,紀錄的進製值或借位值 of是對有符號數會不會產生溢位的標誌 同樣...
《組合語言》王爽第三版 實驗9
datas segment 此處輸入資料段 db w 00000010b,e 00000010b,l 00000010b,c 00000010b,o 00000010b db m 00000010b,e 00000010b,0,t 00100100b,o 00100100b,0 db m 01110...