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