已然就位 发表于 2017-9-29 20:18:47

转移的一些疑问

start:mov ax,2000h
        mov ds,ax
        mov bx,0

s:        mov cl,0
        mov cx,
        jxcz ok
        inc ok
        jmp short s
ok:
        mov dx,bx
题目是将段地址2000h中第一个值为0的字节,把偏移地址放入dx中。


在s:中inc ok换成inc 有什么注意的地方?
还一个就是jxcz不是跳到ok吗,程序应该执行到ok那一段,那么接下来是怎么回到inc ok那一行的?

ba21 发表于 2017-9-29 20:27:42

inc ok 这样也可以?

丶忘却的年少o 发表于 2017-9-29 20:41:15

初步改了一下,不懂再问!
start:mov ax,2000h
       mov ds,ax
       mov bx,0

s:   mov cl,0                ;这个好像没什么用呀,下面这句还是会替换掉cl呀
       mov cx,
       jcxz ok                ;不是jxcz,检查下错误。只有cx=0才会跳转
       inc bx                ;不加[]的,你要加地址,不是bx地址的值!!!还有,别加定位点ok等
       jmp short s

ok:           mov dx,bx

陈淮南 发表于 2017-9-29 21:46:10

兄弟用的什么软件写程序

丶忘却的年少o 发表于 2017-9-29 21:47:33

陈淮南 发表于 2017-9-29 21:46
兄弟用的什么软件写程序

问我吗?写什么程序?汇编还是C?

陈淮南 发表于 2017-9-29 21:50:16

对啊汇编 我刚注册不能私聊你

丶忘却的年少o 发表于 2017-9-29 21:53:16

陈淮南 发表于 2017-9-29 21:50
对啊汇编 我刚注册不能私聊你

大哥,点我回复的那个楼的左下角有点透明的“回复”再发言,不然我收不到你的消息的。
notepad++写的代码,DOSBox运行的代码

陈淮南 发表于 2017-9-29 21:57:16

丶忘却的年少o 发表于 2017-9-29 21:53
大哥,点我回复的那个楼的左下角有点透明的“回复”再发言,不然我收不到你的消息的。
notepad++写的代 ...

好的,能加你qq吗 把软件传给我一下 谢谢了

陈淮南 发表于 2017-9-29 21:57:57

丶忘却的年少o 发表于 2017-9-29 21:53
大哥,点我回复的那个楼的左下角有点透明的“回复”再发言,不然我收不到你的消息的。
notepad++写的代 ...

我邮箱957097425@qq.com

丶忘却的年少o 发表于 2017-9-29 21:59:53

陈淮南 发表于 2017-9-29 21:57
我邮箱

notepad++百度下个就行,这个没要求的。
DOSbox链接:https://pan.baidu.com/s/1slUEn3R 密码:h8y9

陈淮南 发表于 2017-9-29 22:08:08

丶忘却的年少o 发表于 2017-9-29 21:59
notepad++百度下个就行,这个没要求的。
DOSbox链接:https://pan.baidu.com/s/1slUEn3R 密码:h8y9

好的 谢谢老哥

已然就位 发表于 2017-9-29 23:08:15

丶忘却的年少o 发表于 2017-9-29 20:41
初步改了一下,不懂再问!

不懂的话就是第二个问题啊

丶忘却的年少o 发表于 2017-9-30 00:05:12

已然就位 发表于 2017-9-29 23:08
不懂的话就是第二个问题啊

我在代码里写了,你把jcxz写反了,就算cx=0也不会跳的。
你把你的代码改了试试,有问题再问,没问题别忘记点“最佳答案”{:10_254:}

已然就位 发表于 2017-9-30 10:16:27

丶忘却的年少o 发表于 2017-9-30 00:05
我在代码里写了,你把jcxz写反了,就算cx=0也不会跳的。
你把你的代码改了试试,有问题再问,没问题别忘 ...

就是jcxz不是跳到ok吗,程序应该执行到ok那一段,那么接下来是怎么回到inc ok那一行的?就是这个问题。是不是ok段执行完了就会回到inc ok。你这里是inc bx。简单的说就是跳出S循环,到了ok段,程序的角度来说接下来是怎么回到inc bx

丶忘却的年少o 发表于 2017-9-30 10:48:56

已然就位 发表于 2017-9-30 10:16
就是jcxz不是跳到ok吗,程序应该执行到ok那一段,那么接下来是怎么回到inc ok那一行的?就是这个问题。是 ...

这么说吧:
s段里是去寻找一个让CX=0的值的地址,bx是地址,是值,首先你取出一个发现cx不为0,那肯定会去寻找下一个地址呀,而不是跳转出去告诉它你找到了,所以jcxz ok判断出cx不为零后就执行下面那一条,让地址到下一个,判断是不是零,那你地址到下一个肯定是inc bx,那bx到后面去,inc ok是什么,没办法解释的呀,ok只是一个定位点,又不是寄存器,怎么能加那。然后循环s这个点开始的程序继续找……
假设找到了CX=0了,是这个地方的值,那BX就是该值的地址,然后JCXZ OK判断出CX=0,跳转到OK这个定位点开始的程序……

已然就位 发表于 2017-9-30 16:26:04

丶忘却的年少o 发表于 2017-9-30 10:48
这么说吧:
s段里是去寻找一个让CX=0的值的地址,bx是地址,是值,首先你取出一个发现cx不为0,那肯定会 ...

原来我理解错误了,我理解成找到0后放入ds,会继续寻找

丶忘却的年少o 发表于 2017-9-30 16:31:39

已然就位 发表于 2017-9-30 16:26
原来我理解错误了,我理解成找到0后放入ds,会继续寻找

多看看代码的执行过程就会了,一开始是容易理解错

已然就位 发表于 2017-9-30 16:34:54

丶忘却的年少o 发表于 2017-9-30 10:48
这么说吧:
s段里是去寻找一个让CX=0的值的地址,bx是地址,是值,首先你取出一个发现cx不为0,那肯定会 ...

一样的问题但是答案却是这个,和我答案完全不一样

丶忘却的年少o 发表于 2017-9-30 16:43:55

已然就位 发表于 2017-9-30 16:34
一样的问题但是答案却是这个,和我答案完全不一样

我觉得这个答案不对。要是MOV后cx已经是0了,这里inc cx会让loop再次进入循环(cx=0才退出循环),再者,就算不考虑循环,下面的inc bx执行后dx的地址肯定就大了1,答案也不准确了

已然就位 发表于 2017-10-2 18:13:30

丶忘却的年少o 发表于 2017-9-30 16:43
我觉得这个答案不对。要是MOV后cx已经是0了,这里inc cx会让loop再次进入循环(cx=0才退出循环),再者, ...

dos,没有办法进行链接吗?为什么我运行不了程序。我的步骤应该对啊,编写源程序,把后缀名TXT改成asm。点【导入.asm文件】,启动dos.然后就是我图片上的步骤。还一张图片是成功的样式。大神帮我看一下
页: [1] 2
查看完整版本: 转移的一些疑问