第七章 更灵活定位内存地址02 的实验问题
如题所述,我照着小甲鱼的视频写的一个大小写转换的问题,但是‘lOvEYoUSo’中的l不能正常转换,会出现乱码。各位大神看一下,代码如下:ASSUME CS:CODE,DS:DATASG
DATASG SEGMENT
DB 'BEaUtIFuL'
DB 'lOvEYoUSo'
DATASG ENDS
CODE SEGMENT
START :
MOV AX,DATASG
MOV DS,AX
MOV BX,0
MOV CX,9
S: MOV AL,
AND AL, 11011111B
MOV ,AL
MOV AL,
OR AL, 00100000B
MOV ,AL
INC BX
LOOP S
CODE ENDS
END START
拉登2.0 发表于 2012-2-21 15:04 static/image/common/back.gif
你说的是对的,但问题是,我修改完后,再次运行这个程序,那么程序就会再次将‘lOvEYoUSo’放入同样的内存 ...
你开始的 data segment 定义的数据段 没变 你mov ax,datamov ds,ax这还是定位在原来的位置上!~ 所以你E修改的都是白改的而且你在winxp 虚拟的debug下 修改完数据 关闭这个debug 所有你修改的都不存在了!~ 代码没有问题,本机测试正常,大小写转换正常,是你编译器和电脑的问题!仔细看看!晚安 现在测试确实可以了,但还有一个问题想要问一下大家:在debug下用E命令修改‘lOvEYoUSo’中‘l’所对应单元的内容,再运行程序会发现‘l’内的内容不会是‘L’了,会是其他的字符或显示不出来。这是为什么? 本帖最后由 莫名其妙 于 2012-2-21 14:54 编辑
你E命令修改了内存单元的值 那应改是修改了对应的AScII 码 当然会修改显示出的内容!~你要修改成31 那就是显示1 改成32 就显示2 改成49就是大写的 I 69 是小写的i 去看看ASCII码表 十六进制与对应字符 就知道了 莫名其妙 发表于 2012-2-21 14:49 static/image/common/back.gif
你E命令修改了内存单元的值 那应改是修改了对应的AScII 码 当然会修改显示出的内容!~你要修改成31 那就是 ...
你说的是对的,但问题是,我修改完后,再次运行这个程序,那么程序就会再次将‘lOvEYoUSo’放入同样的内存中,覆盖掉原来的数据,那么,刚才的修改就是无效的了,所以,不清楚为什么会这样。。。。欢迎讨论! 你再次运行程序应为你上面设置的ds还是原来那段 所以就会被覆盖 你还没懂我的意思,算了吧,总之还是谢谢你的帮助。
页:
[1]