您的位置:首页 > 其它

王爽<汇编语言>实验十

2014-12-18 21:55 309 查看
实验十 3.数值显示(以下程序附带测试程序)

;名称: dtoc
;功能: 将dword型数据转变为表示十进制数的字符串,字符串以0为结尾
;参数: (ax)=dword型数据低字
;               (dx)=dword型数据高字
;      ds:si指向字符串的首地址
;返回: 无
assume cs:code
data segment
haha dd 4294967295
tata dd 16 dup(?)
data ends
code segment
main:
mov ax,data
mov ds,ax
mov si,offset haha
mov ax,[si]
add si,2
mov dx,[si]
mov si,offset tata
call dtoc
mov dh,12
mov dl,30
mov cl,1
mov si,offset tata
call show_str
mov ax,4c00h
int 21h

dtoc:
push bx
push cx
push si
mov  bx,0      ;bx 用于记录最终的位数
r:
mov cx,10
call divdw
push cx                    ;计算余数,商,余数保存入栈
inc  bx        ;位数增加

cmp dx,0
jnz next
cmp ax,0
jz  ok                    ;商为0,则跳出r循环
next:
jmp r
ok: mov cx,bx
s:  pop ax
add al,30h
mov [si],al
inc si
loop s
mov byte ptr [si],0
pop cx
pop bx
pop si
ret

divdw:
push bx
mov bx,ax
mov ax,dx
mov dx,0
div cx
push ax   ;将int(H/N)入栈
mov ax,bx
div cx    ;[rem(H/N)*65536+L]/N结果商放在dx中,余数放在ax中
mov cx,dx
pop dx
pop bx
ret

show_str:
push cx
push bx
push ax
push dx
push ds
push es
push di     ;将要使用到的寄存器入栈

mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bx,ax    ;基址赋值
mov al,2
mul dl
mov di,ax    ;变址赋值

read:
mov ch,[si]
cmp ch,0
jz  ok2      ;判断是否遇到字符串尾端

mov ah,cl
mov al,[si]
mov es:[bx+di],ax
inc di
inc di       ;指向下一个屏幕显示位置
inc si               ;指向下一个字符
jmp read
ok2:
pop di
pop es
pop ds
pop dx
pop ax
pop bx
pop cx               ;使用到的寄存器出栈
ret

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