课程设计1
本帖最后由 major_lyu 于 2020-2-19 03:57 编辑**** Hidden Message ***** 代码看过了,显示效果正常。
如果能再优化一下,去掉中转table的存储空间
直接输出显示,代码会更加简洁
年份输出单独一个函数显示
总收入、职员人数、人均收入应该可以共用一个函数
在调用之前设置好参数,然后在调用
你可以参考一下我的帖子,代码注释很详细的 LinuxDeepin 发表于 2020-2-19 23:12
代码看过了,显示效果正常。
如果能再优化一下,去掉中转table的存储空间
直接输出显示,代码会更加简洁
...
嗯,我也注意到了。谢谢您的建议。目前的最初级的代码,想法是直接利用前面几个实验写好的代码,并使主函数尽量简洁。有时间会按照您的建议进行优化。 感谢分享 {:5_101:}{:5_101:}{:5_110:} kk 1 ;dtoc代码段
; 功能:将双字(32位)数字转换成对应的字符串存放到制定的内存地址
; 输入参数:ax------数据的低16位
; dx------数据的高16位
; ds------存储字符串的数据段地址
; si------存储字符串第一个字符的偏移地址
dtoc: push si ;
push ax
push bx
push cx
push dx ;寄存器压栈,保护上下文数据
mov bx, 0 ; bx记录字符串长度
s1: mov cx, 10d
call divdw ;ax/10, ax:商的低16位,dx:商的高16位 cx: 余数
add cx, 30h;计算余数ASCII码
push cx ;将余数ASCII码压栈
inc bx ;数据位数加1
mov cx, ax ;判断商的低16位是否为0
jcxz s2 ;如果商低16位为0,跳转,判断商的高16位是否为0
jmp short s1
s2: mov cx, dx;判断商的高16位是否为0
jcxz s3 ;如果商高16位也为0,跳转,存放最后一位余数
jmp short s1
s3: mov cx, bx ;将字符串长度作为循环次数赋给CX
s4: pop ax ;从栈顶弹出
mov ds:,al ;取字符ASCII码所在的低字节,放到数据段偏移地址si处
inc si ;si指向下一个字节
loop s4 ;循环,取出下一个字符,知道取出所有字符,cx=0
mov al, 0 ;在字符串末尾加上0,表示字符串结束
mov ds:, al
okdtoc:pop dx ;恢复上下文寄存器
pop cx
pop bx
pop ax
pop si
ret
想问下这一段的S4这个为啥pop的是ax,ascll码不是保存在cx吗,不是应该pop cx吗 1
正在学这个 收藏一下
帮助本版积分规则参与/回复主题
学习 666 1
学习一下 正在学习中…… 鱼c万岁 学习 看看
学习一下