您的位置:首页 > 其它

王爽《汇编语言》第十章实验十 子程序1(show_str) 题目解答

2009-03-18 00:04 411 查看
; 第十章 实验十 练习1
; 子程序描述
; 名称:show_str
; 功能:指定位置,用指定颜色,显示一个用0结束的字符串
; 参数:(dh) = 行号(0--24),(dl) = 列号(0--79)
; (cl) = 颜色,ds:si 指向字符串的首地址
; 返回:无

assume cs:code, ds:data

data segment
db 'Welcome to masm', 0
data ends

code segment
start:
mov ax, data
mov ds, ax

mov dh, 8
mov dl, 3
mov cl, 2

mov si, 0

call show_str

mov ah, 01h ; 不是mov ax, 01h
int 21h

mov ax, 4c00h
int 21h

show_str:
push ax
push bx
push cx
push dx
push es

; 计算好字串开始显示的地址Y = 160*(行数-1) + 列数*2-2, B800 : Y
; 循环将参数里的字串写进显卡内存,并检测到0就返回

; bx = 160*(行数-1)
sub dh, 1
mov al, 160
mul dh
mov bx, ax ; bx 为根据行数算出来的偏移值

; ax = 列数*2-2
;mov bl, dl
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

ret

code ends
end start
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: