摘要: 编写一个子程序,将包含任意字符,以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中的内容会发生改变?
可能要再做些实验才能发现其中的规律。如果你在这里就正确回答了这个问题,那么要恭喜你,因为你有很好的悟性。大多数的学习者对这个问题还是比较迷惑的,不过不要紧,因为随着课程的进行,这个问题的答案将逐渐变得显而易见。
阅读全文
摘要: 阅读别人的代码作为开发人员是一件经常要做的事情。一个是学习新的编程语言的时候通过阅读别人的代码是一个最好的学习方法,另外是积累编程经验。
阅读全文
摘要: 本文不是描述怎样编写dll程序,也不是说明dll在windows系统的意义。我们的目的是确认dll加载到进程空间的一些模糊的概念。
一、程序加载dll的两种情况:
二、从MSDN文档来研究操作dll的API
三、关于引用计数递减到0会导致模块卸载映射的问题
阅读全文
摘要: 本文研究eSNACC的C运行时库动态内存管理。
eSNACC的运行时库和代码生成用的内存管理函数用的是统一的宏定义原型,但是支持用户自己配置内存管理方案。eSNACC本身提供两种内存管理方案:
一个是mem.h/c定义的直接分配;另一个是nibble-alloc.h/c定义的Nibble memory系统。
阅读全文