851596747 发表于 2022-12-9 09:48:06

9.3自测

assume cs:codesg

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

    s:
      mov cl,      ;cx的低位cl设为bx,
      mov ch,0      ;把cx的高位ch设置为0;因为是在2000H中查找字节字节为8位;
      inc cx      ;要想使得(cx)=0,进行指令跳转;就要在执行loop s时,(cx)=0;在loop 判断时候,是要进行(cx)=(cx)-1操作,减去1之后再判
                         断,所以此时的cx应该加1,才可使得(cx)=(cx)-1=0,结束loop去执行ok;(因为loop的语法就是(cx)=0时,什么都不做,程序向下执行,就是去执行 指令 ok)
      inc bx
      loop s
   
    ok:
      dec bx
      mov dx,bx
   
    mov ax,4c00h
    int 21h
codesg ends

end start







应该输出 :inc cx
(1)因为cx为处的ch为0;cx的cl为bx,
如果bx为0,则cx=0,找到目标值。应该结束。
(2)但是此时程序会继续向下,执行下一行指令,直到loop s;在loop s 执行时候,才会判断 cx是否为0,如果是0,则程序向下执行,去执行ok;
要想使得(cx)=0,进行指令跳转;就要在执行loop s时,(cx)=0;在loop 判断时候,是要减去1之后再判断,所以此时的cx应该加1,才可使得(cx)=(cx)-1=0,结束loop去执行ok





页: [1]
查看完整版本: 9.3自测