尋找memory,如果找不到會一直收循問題 請多多指教

tocnc111 2008-10-08 07:13:20
編譯過,但是不能執行尋找memory,如果找不到會一直收循問題


.model small
.386
.stack
.data

a_table DB '0123456789ABCDEF'
SM db 0dh,0ah,'SM:','$'

.code

.startup

mov ax, @data
mov ds,ax
mov dx,offset SM
call change
mov ax,0F000h
mov es,ax
mov bx,0h
find:
mov eax, dword ptr es:[bx]
call hexput
cmp eax,'_MS_'
jnz change
add bx,1h
jmp find

;----------------------------------------------------------------------------;

hexput:
push bx
push cx
push dx
push ax

mov bx,OFFSET a_table

mov cl,04h
shr al,cl
xlatb
mov dl,al
mov ah,02h
int 21h

pop ax
push ax
and al,00001111b
xlatb
mov dl,al
mov ah,02h
int 21h
pop ax
pop dx
pop cx
pop bx

ret

ret
;-------------------------------------;
change:
mov ah,09h
int 21h
ret

;-----------------------------------------;
ext:
mov ah,4ch
int 21h
end
...全文
58 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
masterkill 2008-10-08
  • 打赏
  • 举报
回复
对了,_SM_处的地址是高地址在后,低地址在前,读的时候注意,先高后低,存完一个记得shl
masterkill 2008-10-08
  • 打赏
  • 举报
回复
还有啊,最后显示的过程调用你换换,我给你发了一个,你那个看起来很不舒服,数据段也不要定义了,麻烦
上面的补充,打个比方:
'_SM_'对应十六进制是xxxxxxxxh
mov ebx,xxxxxxxxh
将f000给ax,指针往后一个一个跳,直到满足条件eax=xxxxxxxh,此时的地址即是fxxxh,再show出来就好
masterkill 2008-10-08
  • 打赏
  • 举报
回复
又是你!
cmp eax,'_SM_'这里,好像不能这样比的吧
在debug32中用“-s f000:0000 ffff '_SM_'”可以找到匹配地址,然后再“-d 地址”,可以显示其内容,所以在比的时候应该用‘_SM_’对应的16进制对应的ASCII码来比,计算机是不认识‘_SM_’的。
你是想从f000处开始搜寻符合条件‘_SM_’的地址,按照上面所说的再试试
BAYNPU 2008-10-08
  • 打赏
  • 举报
回复
......
mov bx,OFFSET a_table

mov cl,04h ;把这个改为:mov cl,01h
shr al,cl
xlatb
mov dl,al
mov ah,02h
int 21h

......

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧