|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 兰陵月 于 2016-12-22 19:07 编辑
题3.28 写一个程序,滤去某个字符串中的空格符号(ASCII码20H)。设字符串已0结尾。
(我简化了一下,直接把滤去空格后的字符串放在另一个地址中)
题目来自《80X86汇编语言程序设计教程》(杨季文 等编著 钱培德 审)第109页题目3.28
- ;程序名:TT328.ASM
- ;功 能:写一个程序,滤去某个字符串中的空格符号(ASCII码20H)。设字符串已0结尾。
- ASSUME CS:CSEG,DS:DSEG
- ;数据段
- DSEG SEGMENT
- ZFC_CHAR1 DB "li HaIl !N# c&-FJ% 3y(=H!n@ ",0 ;这是我本人假设的字符串。
- ZFC_CHAR2 DB ?
- DSEG ENDS
- ;代码段
- CSEG SEGMENT
- START: MOV AX,DSEG
- MOV DS,AX
- MOV BX,OFFSET ZFC_CHAR1
- MOV SI,OFFSET ZFC_CHAR2
- JX: MOV AL,[BX]
- CMP AL,0
- JZ OK
- CMP AL,20H
- JZ NEXT
- MOV DS:[SI],AL
- INC SI
- NEXT: INC BX
- JMP JX
- OK: MOV AX,4C00H
- INT 21H
- CSEG ENDS
- END START
复制代码
当假设的字符串中字符个数<=23个时,程序运行正确。
当假设的字符串中字符个数>23时,程序运行不正确,死机~
调试情况如下:
上图中当复制完非空格的字符“%”(图中1和2处)之后,程序中出现莫名其妙的语句(图中第3处)。
上图是继续多次按T之后出现的情况。
图中1和2的语句经常发生变化,第1处的语句:ADD AX,数字,这个数字每次都发生变化。其他不变。
第2处的是整句都发生随机变化~。
请高手帮我分析分析~~我还不得其手~~ |
|