写了一个字符串比较的小程序,结果发现无论如何都输出2,为什么?

asdf12312y 2010-12-30 11:23:35
code segment
assume cs:code
org 100h
db 'hbha$';我改成aaaa,或者kkkk,结果竟然都还是输出"2"
db 'hche$'
start:
mov si,100h
mov di,105h
mov ax,0h
mov ds,ax
mov es,ax
mov cl,4h
rep cmpsb
jl printl
jg printg
printe:
mov ah,2h
mov dl,31h;输出1
int 21h
jmp return
printl:
mov ah,2h
mov dl,32h;输出2
int 21h
jmp return
printg:
mov ah,2h
mov dl,33h;输出3
int 21h
return:
mov ah,4ch
int 21h
code ends
end start

----------------------

我的代码到底错在哪里?
...全文
62 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shzhfu 2010-12-31
  • 打赏
  • 举报
回复
楼上已指出了你的主要错误,我再补充一下。

code segment
assume cs:code
org 100h
jmp start 看你的程序结构应该是希望写成.com程序, 如果是这样, 偏移地址100H处必须是可执行指令(它是入口地址), 加这句转到真正的入口处. 如果这样就不用给ds赋值了, 且最后的end入口地址也不能是start了.

mov cl,4h 循环次数要用cx控制


rep cmpsb rep 是无条件重复4次, 所以前3次比较都白做.


jl printl 这里用的是最后那次比较的结果
jg printg
shyokou 2010-12-31
  • 打赏
  • 举报
回复
介个改得好聪明 ;-)

[Quote=引用 1 楼 masmaster 的回复:]

修改以后, 你再试一试,注意注释部分
Assembly code

code segment
assume cs:code,ds:code,es:code ;貌似必须的
org 100h
db 'hdha$'
db 'hdda$'
start:
mov si,100h
mov di,105h
mov ax,cs ;这个也必须
mov ds,ax
m……
[/Quote]
masmaster 2010-12-30
  • 打赏
  • 举报
回复
修改以后, 你再试一试,注意注释部分

code segment
assume cs:code,ds:code,es:code ;貌似必须的
org 100h
db 'hdha$'
db 'hdda$'
start:
mov si,100h
mov di,105h
mov ax,cs ;这个也必须
mov ds,ax
mov es,ax
mov cx,4h
cld ;这个事必须的
repz cmpsb ;rep要加Z
jl printl
jg printg
printe:
mov ah,2h
mov dl,31h
int 21h
jmp return
printl:
mov ah,2h
mov dl,32h
int 21h
jmp return
printg:
mov ah,2h
mov dl,33h
int 21h
return:
mov ah,4ch
int 21h
code ends
end start

21,458

社区成员

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

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