tyyfly 发表于 2025-4-14 01:21:12

检测点9.2

补全编码,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。
assume cs:code
code segment
      start:      mov ax,2000h
                        mov ds,ax
                        mov bx,0
                s:   
                        
                        
                        
                        jmp short s
                ok:    mov dx,bx
                        mov ax,4c00h
                        int 21h                        
code ends
end start

A: xor cx,cx
    mov cl,
    jcxz ok
    inc bx

FishC 发表于 2025-4-14 01:22:13

解答:

需要补全的代码如下(关键点已用加粗标出):

assume cs:code
code segment
    start:mov ax,2000h
            mov ds,ax
            mov bx,0
      s:xor cx,cx      ; 清空CX寄存器
            mov cl,    ; 将内存2000H:的字节存入CL
            jcxz ok         ; 若CX=0(即当前字节为0)则跳转
            inc bx          ; 偏移地址+1
            jmp short s   ; 继续循环
    ok:   mov dx,bx
            mov ax,4c00h
            int 21h
code ends
end start

原理解释:


[*]xor cx,cx:清空CX,避免残留值干扰判断
[*]mov cl,:将内存2000H段中偏移为bx的字节值存入CL
[*]jcxz ok:若CX=0(即CL=0),跳转到ok标签保存结果
[*]inc bx:若未找到0,偏移地址递增继续查找


此代码会从偏移地址0开始逐个字节检查,找到第一个0时,立即将偏移地址存入DX并结束程序。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 检测点9.2