汇编语言
无论上层语言、框架多么眼花撩乱,汇编永远是程序设计的“易筋经”!
摘要: 编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。
名称:letterc
功能:将以0结尾的字符串中的小写字母转变成大写字母
参数:ds:si指向字符串首地址
阅读全文
摘要: 总结:
1、程序实现中基本都用到了栈,主要用于暂存寄存器数据。不过在子程序dtoc和ddtoc中,我还用栈存放参数%10的值,因为形成字符串时需要逆序写到内存。
2、在dtoc和ddtoc中,为了区分保存的寄存器数据和十进制数的ascii值,特意往栈中压入一个0,作为“桩”。
3、主程序中在循环跳转的loop语句被注释掉:“;loop show ;报错:jump destination too far ,所以自己手动判断cx来跳转。”,原因正如说明,偏移超过了一个字节,所以我自己修改判断cx而利用jmp(jmp near)来实现跳转。因为所有有条件跳转都是短转移,是不是把循环中间的一些内容也写到子程序来减少偏移更好?
4、对显示时的起始行和列偏移的数据,我都统一放在数据段中,可以很方便的修改来查看效果。
阅读全文
摘要: 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串"welcome to masm!"。
1、这种实现是我的第二个版本,第一个版本是将要显示的字符和字符的颜色属性都一起定义,然后就是从偏移地址读取写到显存,比如,绿色显示的定义如下:
db 'w',82h,'e',82h,'l',82h,'c',82h,'o',82h,'m',82h,'e'...
但是这样的话,首先'welcome to masm!'要重复3次,然后颜色属性就要重复更多了。既占用内存,修改也很麻烦。所以就将字符串和颜色属性分开定义,在逻辑处理时来写内存。
2、对字符颜色属性,可以很方便的通过修改“db 82h,0ach,0f9h”一句来查看不同的效果。
3、关于行偏移和列偏移的计算,我在代码中已经给出了详细的说明,应该很清楚了。同样的,我也将这些数据单独定义在数据段,可以很方便的修改以查看效果。
阅读全文
摘要: 实验7 寻址方式在结构化数据访问中的应用
本题设计的好处就在于:
1、年份year是用ascii表示,所以要4个字节。而公司收入又是一个dd类型,也是4个字节。所以这两个数据可以共用一个寄存器表偏移,我的程序用的是si。
2、读入收入时,就有意用dx存高位,用ax存低位;读入雇员数时,用bx来存储,这样就能直接用div求人均收入,也就不需要额外的寄存器转存的过程。
3、故意将table段地址用ss存,这样就顺理成章的用bp作为table段的偏移。就不需要显式标出段寄存器了。
基于以上设计,也就不需要额外弄堆栈,寄存器等,而且一个循环就能实现了。
阅读全文
摘要: 仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
可能要再做些实验才能发现其中的规律。如果你在这里就正确回答了这个问题,那么要恭喜你,因为你有很好的悟性。大多数的学习者对这个问题还是比较迷惑的,不过不要紧,因为随着课程的进行,这个问题的答案将逐渐变得显而易见。
阅读全文
摘要: 学习DOS下内存驻留程序的基本思想,了解与熟悉用汇编语言编写程序。本课程设计将完成一个小的.com程序,运行程序后,你的所有按键输入(指在DOS或Windows的DOS模式下)将不被接受,所有输入将被替换成特定的字符串(回车键除外)。
阅读全文
摘要: MASM32开发环境和MASM汇编器版本
阅读全文