实验10.3_数值显示拓展_dword型数转变为表示十进制数的字符串
2014-04-18 21:54
330 查看
assume cs:code data segment db 10 dup (0) data ends code segment start : mov ax,4240H;F4240H=1000000 mov dx,0FH mov cx,0AH mov bx,data mov ds,bx mov si,0 call dtoc mov dh,8 mov dl,3 mov cl,2 call show_str mov ax,4c00h int 21h dtoc: push ax;子程序中使用的寄存器入栈 push bx push cx push dx push di push si mov di,0;计数器,记录余数的个数 s1: mov cx,10;除数 call divdw inc di add cx,30H;余数+30H转化为ASCII码 push cx cmp dx,0 jne s1 cmp ax,0 jne s1 mov cx,di p: pop ds:[si] inc si loop p ;由于show_str的需要,ds:di处的字符串以零作尾。 ;mov byte ptr ds:[si],0这条语句有无皆可,因为最后一次入栈的时候高8位一定是零 pop si;子程序中使用的寄存器出栈 pop di pop dx pop cx pop bx pop ax ret show_str: push ax;子程序中使用的寄存器入栈 push cx push dx push ds push es push si push di mov al,160;计算行号和列号对应的显存地址 mov ah,0;不要忽略了 dec dh mul dh dec dl add dl,dl mov dh,0;不要忽略了 add ax,dx mov di,ax mov dl,cl;由于下面的jcxz指令要用到cx,所以用dl保存cl的值 mov ax,0b800h mov es,ax s: mov al,ds:[si] mov cl,al mov ch,0 jcxz ok mov es:[di],al mov es:[di+1],dl;颜色属性被保存在dl中 inc si add di,2 jmp short s ok: pop di;子程序中使用的寄存器出栈 pop si pop es pop ds pop dx pop cx pop ax ret divdw: push bx;要用到的寄存器bx、di入栈,下面用它来暂存参数的值 push di;不要将ax,dx,cx入栈,因为程序的目的最终是要修改它们的值 mov bx,ax mov ax,dx mov dx,0 div cx;这一步做完以后,ax中为结果的高十六位,即int(H/N),dx中是rem(H/N)的值 mov di,ax mov ax,bx div cx;这一步做完以后,ax中为结果的低16位,dx中存储余数 mov cx,dx mov dx,di pop di pop bx ret code ends end start
;子程序描述:
;名称:dtoc
;功能:将dword型数转变为表示十进制数的字符串,字符串以0为结尾符。
;参数:(ax)= dword型数据的低16位
; (dx)= dword型数据的高16位
; ds:si指向字符串的首地址
;返回:无
;应用举例:编程,将数据1000000以十进制的形式在屏幕的8行3列,用绿色显示出来。
;在显示时我们调用本次实验中的第一个子程序show_str和第二个子程序divdw
;思路类似实验10.3_数值显示
;总结:在实际编程中,程序的模块化是必不可少的。因为现实的问题比较复杂,对现实
;问题进行分析时,把它转化成相互联系、不同层次的子问题,是必须的解决方法。利用
;call和ret指令,我们可以用简捷的方法,实现多个相互联系、功能独立的子程序来解
;决一个复杂的问题。
;----摘自汇编语言_模块化程序设计
相关文章推荐
- <深入理解计算机系统> CSAPP Tiny web 服务器
- 优秀jquery Mobile教程汇总
- B-tree浅析
- C++实现快速排序
- 解决三星GT-s5831i 加载TexturePacker打包的图片文件会花屏的bug
- SQL truncate 、delete与drop区别
- Hibernate映射一对多关系【inverse】
- 关于IEEE 754浮点数表示的实验
- 简单Floyd php 实现 只为熟悉算法
- STRUTS2中的OGNL
- cas 入门之三:cas 之http 部署(CAS取消https方法配置)
- JQuery模拟一
- poj 1459 最大流(dinic实现)
- Linked List Cycle II
- samba共享文件夹下可读不可写的问题总结
- HTML 中<style>中</style>里面<!-- -->标签是干嘛的
- 制作U盘启动LINUX安装(Ubuntu12.04)
- iOS图片拉伸技巧
- 2011腾讯实习招聘面试题软件开发
- 解决cookie中文乱码问题