|

楼主 |
发表于 2016-1-9 14:45:05
|
显示全部楼层
实验10的第3题,代码越来越长。不知到win32汇编是啥状况。
- ;名称:dtoc
- ;功能:将word型数据变为十进制字符串,0结尾
- ;参数:(ax) = word型数据
- ; ds:si 串首
- assume cs:code
- data segment
- db 10 dup (0)
- data ends
- code segment
- start: mov ax,12666
- mov bx,data
- mov ds,bx
- mov si,0
- call dtoc;调用子程序,将数据变为字符串并保存到指定位置
-
- mov dh,8
- mov dl,3
- mov cl,2
- mov si,0
- call show_str;调用输出子程序
-
- mov ax,4c00h
- int 21h
-
- dtoc:
- push cx
- s0: mov cx,ax
- jcxz ok1;被除数为0表示循环结束,跳出
- mov bx,10;12666/10=1266>256,商要用(ax)保存,所以除数要16位(bx),不能(bl)
- xor dx,dx;12666<65536,除数16位,则被除数必须用到(dx),12666<65536,(dx)置0即可
- div bx;除后的结果 (ax)...(dx)
- push dx;保存余数,并将(ax)作为下次循环的被除数
- inc si;记录循环次数,求得字符串长度
- jmp short s0
- ok1: mov cx,si
- xor si,si
- s1: pop ds:[si];依次出栈,将字符串顺序保存到ds:[si]中
- mov bl,30h
- add ds:[si],bl;数值转换为对应ASCII码
- inc si
- loop s1
- mov ds:[si],cx;将0保存到字符串结尾
- pop cx
- ret
- show_str:;输出字符串子程序
- push ax
- push es
- mov ax,0b800h
- mov es,ax
- mov al,160
- mul dh
- mov bx,ax
- mov al,2
- mul dl
- add bx,ax
- mov ah,cl
- xor cx,cx
- s2: mov cl,ds:[si]
- jcxz ok2
- mov al,cl
- mov es:[bx],ax
- inc si
- add bx,2
- jmp short s2
- ok2: pop es
- pop ax
- ret
-
- code ends
- end start
复制代码
|
|