assembly 如何查找存储区中的8位值并输出存储地址?SBC86汇编

0h4hbjxa  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(136)

我必须为大学创建一个程序,在存储区C 000 H-CFFFH(SBC 86的监控程序)中搜索先前指定的8位值。我们使用i8086仿真器。
但是我完全不知道如何搜索内存区域并输出找到的值的内存地址。

6uxekuva

6uxekuva1#

你可以使用REPNE SCASB来搜索已知的值,我们假设该值当前在AL中(如果不在,则先在mov中搜索)。
REPNE SCASB(不相等时重复,扫描字符串字节)的工作方式如下:
1.比较ALbyte ptr [es:di]di指定的内存地址处的字节),并相应地设置标志。

  1. di加1(如果方向标志清除,否则减1),cx减1,不改变标志。
    1.如果为AL = byte ptr [es:di]cx = 0,则移至下一条指令。
    1.否则,后藤1。
cld            ;we want scasb to auto-inc
mov di,0C000h  ;begin search at $C000 (assumes ES = segment you want to search)
mov cx,1000h   ;repeat until $CFFF
repne scasb    ;begin the search

此时,di将包含该字节的地址(如果找到的话)。然而,在这种情况下,您仍然需要一个条件分支,用于所需字节位于最后一个可能位置的极端情况。仅查看di不会告诉您这一点。

cld
mov di,0C000h  
mov cx,1000h   
repne scasb    
jne notFound 
    ;your code for what happens when you find it goes here
    jmp done
notFound:
    ;your code for what happens when you don't find it goes here
done:
ret

编辑:根据the hardware specifications.,将ds:si的错误用法更改为es:di

相关问题