请注意,里面有程序和测试程序,例如 ,。。。
;
; 安装中断7ch的中断例程
; 功能:求一个word型数的平方
;
;
assume cs:code
code segment
start:
; 拷贝代码到非系统管理区
mov ax, cs
mov ds, ax
mov si, offset sqr ; 从cs段的sqr开始复制到0:200处
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset sqrend - offset sqr ; cx为需要复制的代码字节数
cld
rep movsb ; 调用 movsb 把 es:[di] 的字节拷贝到 ds:[si]
; 设置好中断向量
mov ax, 0
mov es, ax
mov word ptr es:[7ch*4], 200h ; 用 word ptr 指明是要拷贝一个字
mov word ptr es:[7ch*4+2], 0
mov ax, 3
int 7ch
mov ax, 4c00h
int 21h
sqr:
mul ax
iret
sqrend:
nop
code ends
end start
;
; 安装7ch中断的中断例程
; 功能:实现将 ds:[si] 开始的字符串显示出来
assume cs:code
data segment
db "e to masm!", 0
data ends
code segment
start:
; 拷贝代码到非系统管理区
mov ax, cs
mov ds, ax
mov si, offset int7c ; 从cs段的int7c开始复制到0:200处
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset int7cend - offset int7c
cld
rep movsb
; 设置好中断向量
mov ax, 0
mov es, ax
mov word ptr es:[7ch*4], 200h
mov word ptr es:[7ch*4+2], 0
; dh = 行数,dl = 烈数,cl = 颜色,ds:si指向首地址
mov dh, 10
mov dl, 10
mov cl, 2
mov ax, data
mov ds, ax
mov si, 0
int 7ch
mov ah, 01h
int 21h
mov ax, 4c00h
int 21h
int7c:
push ax
push bx
push cx
push dx
push es
; 计算好字串开始显示的地址Y = 160*(行数-1) + 列数*2-2, B800 : Y
; 循环将参数里的字串写进显卡内存,并检测到0就返回
; bx = 160*(行数-1)
sub dh, 1h
mov al, 160
mul dh
mov bx, ax ; bx 为根据行数算出来的偏移值
; ax = 列数*2-2
mov al, 2
mul dl
sub ax, 2 ; 根据列数算出来的偏移值
add bx, ax ; 行数和列数的和存在bx中了
mov ax, 0b800h
mov es, ax
mov dl, cl ; 保存字体颜色属性
mov ch, 0
s_show_str:
mov cl, ds:[si]
mov es:[bx], cl
jcxz ok_show_str
mov es:[bx+1], dl
inc si
add bx, 2
jmp short s_show_str
ok_show_str:
pop es
pop dx
pop cx
pop bx
pop ax
iret
int7cend:
nop
code ends
end start
;
; 上一个程序的测试程序
; 测试 7ch 中断,显示字符串
assume cs:code
data segment
db "e to masm !", 0
data ends
code segment
star
王爽《汇编语言》第十三章所有练习解答 来自淘豆网www.taodocs.com转载请标明出处.