組合語言(王爽第三版)檢測點13

2021-09-27 09:14:19 字數 2287 閱讀 4936

(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...