46、汇编语言中的字符串操作与指令循环

汇编语言中的字符串操作与指令循环

1. SASM调试器内存显示问题

使用SASM调试器观察内存移动时,存在一个问题,即SASM显示字符串缓冲区的方式比较奇特。若从第一个下拉菜单中选择“Smart”,SASM会将EditBuff显示为字符字符串,如“abcdefghijklm”,但不显示尾随空格。虽然可以通过这种显示方式观察移动过程,但这并非全貌,可能会造成混淆。

EditBuff的字符显示方式允许包含不可显示字符,如EOL。字符会以十进制等效值和单引号括起来的实际字符形式显示,例如:{97’a’,98’b’,99’c’,100’d’,101’e’,102’f‘103’g’, … 32’‘}。这种格式会显示EditBuff末尾的空格字符,但需要仔细观察才能看到移动过程。

2. 不连续字符串的数据存储

通常认为目标字符串在内存中是连续的字节序列,但实际并非总是如此。除了在执行STOSB指令之间更改RAX的值,还可以更改目标地址。这样就能在一个紧凑的循环中将数据存储到内存的多个不同区域。

3. 显示ASCII表

为了展示上述概念,有一个名为showchargcc的程序。该程序会清屏,在第一行显示标尺,然后在下方显示一个包含256个ASCII字符中224个字符的表格,表格整齐地排列成7行,每行32个字符。表格包含“高”127个ASCII字符,如外语字符、线条绘制字符和各种符号,但不显示前32个ASCII字符,因为Linux将这些视为控制字符,即使有对应的字形,也不会显示到控制台。

以下是showchargcc.asm(不含过程)的代码:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值