鱼C论坛

 找回密码
 立即注册
查看: 3390|回复: 8

[争议讨论] 刚学到问题7.7自己写的,好搞笑的代码

[复制链接]
发表于 2011-11-1 15:25:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编程 将datasg段中的每个单词改为大写字母
assume cs:code,ds:data
data segment
db 'ibm             '
db 'dec             '
db 'dos             '
db 'vax             '
data ends

code segment
start:mov ax,data
      mov ds,ax
          mov si,0
          mov bx,0
          mov cx,3
          s:mov cx,4
          s1:mov al,[bx+si]
          and al,11011111b
          mov [bx+si],al
          add bx,10h
          loop s1
          mov bx,0
          inc si
          loop s
          mov ax,4c00h
          int 21h
          code ends
          end start
课本说先思考再往后看 于是我就写出了上面这段代码  杯具发生了....:'(
看到这题后我第一时间想到用嵌套,虽然把它们都改为大写字母了,但是程序进入一个无限循环。用debug调试发现cx的值在循环结束后又变回原来的数字。:@
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-1 15:37:48 | 显示全部楼层
第二个循环覆盖了第一个循环的cx值....
很简单,push第一个cx值,第二个循环用完了在pop出来就行了撒..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-1 16:11:11 | 显示全部楼层
栈的长度怎么来定义  我只定义了一个字型单元的长度   调试不了  改到八个字型单元长度才可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-1 16:14:50 | 显示全部楼层
第一循环的值CX是4,第二个循环把第一个循环的值覆盖了,当结束完内循环S1后,CX的值为0,不在循环。向下执行到loop S处,先将CX的值减一。就会溢出,CX的值就变了,然后跳到S处,再向下,又会执行S1处的循环,一直这样下去。你将循环S的CX值PUSH一下,或者用其他寄存器,内存地址保存一下,在将S1的CX赋值。S1循环完了,在恢复S的CX值就可以了:Q
说那么多,自己都晕了,不知道你看的明白不:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-1 16:41:27 | 显示全部楼层
本帖最后由 ever.g 于 2011-11-1 16:42 编辑

;P 一个溢出造成的无限循环。。谁让loop要先cx-1再比较呢。。
0-1 就借位变ffff了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-1 17:17:52 | 显示全部楼层

你没看前面的章节吗?
  栈也是内存单元... 不定义默认栈顶是ffff
   如果要定义
assume ss:stacksg

stacksg segment
dw 8 dup(0)
stacksg ends
这样就定义了16个字节单元的栈..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-11-1 22:05:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-11-1 22:08:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-11-1 22:10:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 23:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表