《汇编语言第三版》王爽学习历程——课程设计一

本文记录了作者在学习《汇编语言第三版》时的课程设计过程,主要任务是编写一个子程序dtoc_dword,将dword型数据转化为十进制字符串。作者通过搬家公司的场景比喻,详细分析了不同数据类型的处理方式,并分享了代码实现。尽管存在寄存器冲突等问题,但最终实现了功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

课程设计一

新人自己分析的,希望大神给予意见~!

任务:
将实验7中的Power idea公司的数据按照下图显示出来
这里写图片描述

需要重新编写一个子程序
编写一个新的数据到字符串转化的子程序,完成dword型数据到字符串的转化,说明如下:
名称:dtoc_dword(这里我自己取的名称)
功能:将dword型数转变为表示十进制的字符串,字符串以0为结尾符。
参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,ds:si指向字符串的首地址
返回:无
注:在这个子程序中要注意除法溢出的问题,可以用我们在试验10中设计的子程序divdw来解决。

分析
做一个简单的比喻:
我们是搬家公司的,要为4个人群搬家,从原来的数据段,搬到新家——显存段,而我们的工具是一辆搬家车——一个8各字节的空的字符串,这四类人群是:
1、年份:这类人群特点是,打包好了自己的行李,按时在家等我们去接他们去新的住所,而且上车就走。即,无需进行计算,也无需进行数值和ascii码之间的转换,从数据段复制到字符串然后写入显存相应位置就行。
2、年收入:这类人群的特点是,都是美女,虽然按时在家等我们去接,但是很懒,不打包行李而且行李又多,所以我们必须先打包行李再上车送她们去新的住所。即,需要进行数值和ascii码的转化,并且数值较大,必须写一个新的子程序,题干中有设计,不赘述。然后才可以从数据段复制到字符串后写入显存相应位置。
3、人数:这类人群和第二类人群很像,不过他们行李比较少,可以看做是比较懒的男孩子,行李不多。即,虽然需要转化ascii码,但是由于数值都比较小,所以子程序3完全可以胜任。
4、人均年收入:这类人群属于比较坑的,不仅行李不打包,而且人还不按时出现,需要我们去找到以后再帮他们打包行李,然后才能上车。即:需要计算后,然后进行数值和ascii码之间的转换,再存入字符串中后写入显存。

基本思路就是如此,现成的子程序有三个,由于刚学汇编,子程序写的不是很好,能不入栈的尽量不入,导致后寄存器冲突严重,调试了n次才可以正常运行,友情提示,尽量保存好主程序中的寄存器。
我是一列一列入显存的,还有我个格式是,列与列之间空出10个字符。
虽然我这样分析感觉不专业,但是没办法,刚学,希望用一个比较情景式的感觉来分析问题,可能比较好理解。

下面是我的代码,请大神指点:

assume cs:codesg

datasg segment
        db '1975', '1976', '1977', '1978', '1979', '1980'
        db '1981', '1982', '1983', '1984', '1985', '1986'
        db '1987', '1988', '1989', '1990', '1991', '1992'
        db '1993', '1994'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值