zzh976 发表于 2011-7-7 17:55:35

关于检测点9.3问题

在检测点9.3中,assume cs:code
code segment
start:
      mov ax,2000h
      mov ds,ax
      mov bx,0
      s:
                mov cl,
                mov ch,0
            inc cx;此条指令为题目要求补全的指令
                inc bx
      loop s
      
      ok:
                dec bx
                mov dx,bx
                mov ax,4c00h
                int 21h
code ends
end start

我填inc cx读不懂,在此处认为应该是一条判断cx是否为0的语句。

liuhui88126 发表于 2011-7-7 18:23:34

本帖最后由 liuhui88126 于 2011-7-7 18:24 编辑

你用inc cx不就是死循环了嘛?应该是jczx ok,如果值为0,则跳到OK处执行。不为0,则继续循环检查。

liuhui88126 发表于 2011-7-7 18:26:19

你题目看清楚哦,判断偏移地址中的数值是否为哦,为0的话,将偏移地址放入DX

陌路狂奔 发表于 2011-7-7 21:39:30

本帖最后由 陌路狂奔 于 2011-7-7 21:40 编辑

LOOP执行前,先执行CX=CX-1判断CX是否为0,如果为0就向下执行。如果用跳转指令JCXZ或者其它的,下面的DEC BX,应该就不用了,

huyuanhk 发表于 2011-7-8 15:22:00

吃货YA鸭 发表于 2017-6-16 15:14:42

个人感觉,这道题容易狗血的地方。
1.不是所有带有标号的指令都需要跳转或者调用

黑豆哥哥 发表于 2020-6-17 20:24:18

吃货YA鸭 发表于 2017-6-16 15:14
个人感觉,这道题容易狗血的地方。
1.不是所有带有标号的指令都需要跳转或者调用

是啊,他这里的OK完全没用,就是用来骗人的,前面也没讲标号可以随便标,要吐了

流浪江湖 发表于 2022-1-24 00:23:39

我上机试了下,死循环。。

sos2356 发表于 2022-1-25 16:24:04

的确,这个ok有没有都一样,不过程序没问题,基本思路是:
1.如果(bx)不为零,那么cx也不为零,程序执行到loop s处cx-1,此时cx不为零,程序继续循环往下找
2.一旦找到为0的值,那么cx=0,执行到loop时cx-1就不为零了,程勋还会循环执行。所以必须在之前再cx+1,才能保证到loop的时候cx-1=0,然后程序往下执行到ok处,但前面bx多加了个1,必须先减掉才是正确的偏移地址。
页: [1]
查看完整版本: 关于检测点9.3问题