您的位置:首页 > 其它

《王爽——汇编语言》P206 实验室10第三个问题的答案

2015-11-11 21:52 337 查看
assume cs:code, ds:data, ss:stack

data segment
db 10 dup (0)
data ends

stack segment
db 16 dup (0)
stack ends

code segment

start:
mov ax, 123
mov bx, data
mov ds, bx
mov bx, stack
mov ss, bx
mov sp, 16
call dtoc

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

mov ax, 4c00H
int 21H

dtoc:              ;start of function dtoc
push ax
push bx
push cx
push dx
push si
push di

mov si, 0
mov dx, 0
mov bx, 10
div bx     ;div指令,bx作为16位除数,dx和ax作为被除数,商保存在ax中,余数保存在dx中
mov cx, ax ;商为零作为判断条件
L:
push dx
inc si
jcxz s1
mov dx, 0
div bx
mov cx, ax
jmp L

s1:
mov di, 0
s3:	mov cx, si
jcxz s2
pop ax
add al, 30H
mov ds:[di], al
inc di
dec si
loop s3
s2:
mov byte ptr ds:[di], 0 ;在数字字符串的结尾添加0,因为在show_str中要求字符串以0为结尾
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret

; end of function dtoc

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

mov ax, 0b800h
mov es, ax    ;es保存显存所在段的起始地址
mov al, dh
mov ch, 0A0H
mul ch
add dl, dl
mov dh, 0
add ax, dx
mov bx, ax    ;根据给出的行、列参数,计算字符在显存中的位置
mov al, cl    ;字体颜色属性,保存在al中,因为转移指令jcxz,需要用到cl寄存器
s0: mov ch, 0
mov cl, ds:[si]
jcxz s
mov es:[bx], cl
mov es:[bx+1], al
inc si
add bx, 2
jmp s0

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