王爽彙編 第三版 第13章實驗13

2021-10-24 08:55:15 字數 3088 閱讀 3854

(1)  編寫並安裝 int7ch 中段例程,功能為顯示乙個用0結束的字串,中斷例程安裝在0:200處。

**如下

assume cs:code

data segment

db"welcome to masm!",0

data ends

code segment

start: mov ax,0

mov es,ax

mov di,200h

mov ax,cs

mov ds,ax

mov si,offset show

mov cx,offset extra-offset show

cld ;df設定為0,老是忘記加上去

rep movsb

mov ax,0

mov es,ax

mov word ptr es:[7ch*4],200h

mov word ptr es:[7ch*4+2],0

mov dh,10 ;行數

mov dl,10 ; 列數

mov cl,2 ;顏色,綠字黑底

mov ax,data

mov ds,ax

mov si,0

int 7ch

mov ax,4c00h

int 21h

show:mov ax,0b800h

mov es,ax

mov al,160

mul dh ;結果儲存在ax中

add dl,dl

sub dl,2

mov dh,0

add ax,dx

mov di,ax ;記憶體位址位置=行數*160+列數*2-2

s:mov bh,ds:[si]

cmp bh,0 ;記憶體單元中以 00 結尾

je showend

mov es:[di],bh ;字元

mov es:[di+1],cl ;字型顏色

inc si

add di,2

jmp s

showend:iret

extra:nop ;空(佔位) 佔乙個位元組

code ends

end start

(2)編寫並安裝int 7ch 中斷例程,功能為完成loop指令的功能。

引數:(cx)=迴圈次數,(bx)=位移。  要求:在螢幕顯示80個「!」

**如下

assume cs:code

code segment

start: mov ax,cs

mov ds,ax

mov di,200h

mov ax,0

mov es,ax

mov si,offset circle

mov cx,offset extra-offset circle

cldrep movsb

mov word ptr es:[7ch*4],200h

mov word ptr es:[7ch*4+2],0

mov ax,0b800h

mov es,ax

mov di,160*12

mov bx,offset s-offset se ;設定從標號se到標號s的轉移位移

mov cx,80

s:mov byte ptr es:[di],'!'

add di,2

int 7ch ;如果(cx)!= 0,轉移至標號s處

se:nop

mov ax,4c00h

int 21h

circle:push bp ;這裡不一定要push bp 因為bp後面用不到。當然為了安全起見,大多數情況

mov bp,sp ;下都要把變數用棧的結構封起來。

add [bp+2],bx

dec cx ;這裡忘記cx不是會自己減的,當成loop,因此dec cx

jcxz se

pop bp

iret

extra:nop

code ends

end start

執行結果

(3)下面的程式,分別在螢幕的第2、4、6、8行顯示4句英文詩,補全程式。

assume cs:code

code segment

s1: db'good,better,best','$'

s2: db'never let it rest','$'

s3: db'till good is better.','$'

s4: db'and better,best.','$'

s: dw offset s1,offset s2,offset s3,offset s4

row: db 2,4,6,8

start:mov ax,cs

mov ds,ax

mov bx,offset s

mov si,offset row

mov cx,4

ok:mov bh,0

mov dh,cs:[si] ;dh 放行號

mov dl,0 ;dl 放列號

mov ah,2

int 10h

mov dx,cs:[bx] ;ds:dx指向字串位址

mov ah,9

int 21h

inc si

add bx,2 ;兩個位元組=乙個字

loop ok

mov ax,4c00h

int 21h

code ends

end start

執行

cs,ip,棧的狀態,自己觀察。懂了程式就好了

王爽彙編第三版 實驗七

assume cs code,ds data,es table data segment db 1975 1976 1977 1978 1979 1980 1981 1982 1983 db 1984 1985 1986 1987 1988 1989 1990 1991 1992 db 1993 1...

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

1 在上面內容中,我們用7ch中斷例程實現loop功能,則上面的7ch中斷例程所能進行的最大轉移位移是多少?答案 題目描述個人感覺有二義性,因此從loop實現角度和位移值bx變數兩方面來討論 如果從loop的指令角度上看,loop是段內短轉移,它的範圍是 128 127,也就是說最大轉移位移是128...

王爽彙編 第三版 第7章問題7 9

下面是給出的初始 assume cs codesg,ss stacksg,ds datasg stacksg segment dw 0,0,0,0,0,0,0,0 stacksg ends datasg segment db 1.display 這裡是4 16個位元組 db 2.brows db 3...