当前位置: 代码迷 >> 汇编语言 >> 关于jcxz的一个有关问题
  详细解决方案

关于jcxz的一个有关问题

热度:359   发布时间:2016-05-02 04:52:28.0
关于jcxz的一个问题
下面程序是实现在内存2000h段中查找第一个值为0的字节,最后将它偏移地址存储在bx中
assume cs:code
code segment
start: mov ax,2000H
mov ds,ax
mov bx,0
s: mov ch,0
mov cl,[bx]
jcxz ok
inc bx
jmp short s
ok: mov dx,bx
mov ax,4c00h
int 21h
code ends
end start

我不明白为什么最后ip的值会在bx中

------解决方案--------------------
不会是IP的值吧
应该只能找到 mov cl,[bx] 这条指令的IP值吧
------解决方案--------------------
mov ds,ax   ;指数据段的段地址

mov bx,0
inc bx      ;数据段的偏移修改

ok: mov dx,bx ;dx=bx

我不明白为什么最后ip的值会在bx中?如2#所说,cs与ds相同,都是2000h,而且更巧合的是,机器码正好是0

------解决方案--------------------
dx跟ip根本不在同一段好么,就算你的编译器把cs变成2000h,那代表的也不是一个意思,一个的数据段,一个是代码段。。。 cs:ip != ds:dx 虽然指向的地址一样
------解决方案--------------------
我不明白为什么最后ip的值会在bx中
...谁和你说ip值在bx中的?题目说的很清楚“内存2000h段中查找第一个值为0的字节,最后将它偏移地址。。。”
如果你是王爽的书,我告诉你,你打错了,题目说的应该是存放在dx中,而不是你说的bx中。
楼主看来还是晕头转向,先把思路清一下再学下去。其实这里就是bx值作了两个使用:[bx]存进cx作jcxz的判断条件,bx存放当前偏移地址(相对于2000H)。
我最近每天都在学,可以来我博客交流下。