请问为什么cmpxchg8b执行不正常?

idoloveyou 2005-02-14 05:10:07
.model small
.586
.stack 64
.data
t db 31h, 32h, 33h, 34h, 35h, 36h, 37h, 38h, '$'
.code
.startup
mov eax, 31323334h
mov ebx, 35363738h
mov ecx, 35363738h
mov edx, 31323334h
cmpxchg8b qword ptr t

;这段是测试用的,看cmpxchg8b执行后zf到底是1还是0
mov ah, 2
jz a10
mov dl, '!'
jmp a20
a10:
mov dl, '?'
a20:
int 21h

lea dx, t
mov ah, 9
int 21h
.exit 0
end

那段测试结果表明zf=0,但是执行的结果始终是12345678
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2005-02-21
  • 打赏
  • 举报
回复
我用的是 Masm6, ml.exe 的版本号为 6.00
如果你用 Masm6.11 编译, 没有错误提示的话, 说明 6.11 的编译程序是支持的
idoloveyou 2005-02-20
  • 打赏
  • 举报
回复
啊???MASM6不支持这个指令啊??
我用MASM6.11编译的……
zara 2005-02-20
  • 打赏
  • 举报
回复
16 位的代码模式, 并不影响该指令的执行结果, 只要编译程序能识别这个指令. 我用 Masm32V7 中的 ml.exe 进行编译 (因为 Masm6 的 ml.exe 不能识别 cmpxchg8b 指令), 再用 Masm6 的 link.exe 进行连接, 运行后两个情况下的结果和指令的说明是一致的.
programfanny 2005-02-20
  • 打赏
  • 举报
回复
学习中,关注
zara 2005-02-19
  • 打赏
  • 举报
回复
The .STARTUP directive generates start-up code for the given CPU type and the memory model, operating system, and stack type defined by the .MODEL directive. Defines a start-address label, so that you don't need to give a start address with END.
.STARTUP initializes DS, SS, and SP under DOS.

The .EXIT directive generates code that terminates the program and returns control to the operating system or calling program. Use of the <expression> parameter returns a numeric exit code to the operating system or calling program.


CMPXCHG8B 指令的功能大致如下:
IF (EDX:EAX = DEST)
ZF ← 1
DEST ← ECX:EBX
ELSE
ZF ← 0
EDX:EAX ← DEST
你的代码执行后, ZF=0, EDX:EAX=38373635h:34333231h, 是 t 内存处的 qword 类型的内容, 没有错误的. 可能需要主意的是, 该指令是将 qword ptr t 处的 8 字节 (64 位) 作为一个整体来处理的, 存储顺序上也是的, 即 lsb 在前 (对应于结果的 AL), msb 在最后 (对应于结果的 EDX 的最高 8 位). 当然, 如果比较的结果是相等的话, 就是 ECX:EBX -> [qword ptr t]
idoloveyou 2005-02-19
  • 打赏
  • 举报
回复
我知道问题是什么了,我这样编译的是16位代码……

谢谢关注:)
VxD1 2005-02-18
  • 打赏
  • 举报
回复
没人帮忙?帮你up
VxD1 2005-02-14
  • 打赏
  • 举报
回复
想请较一下
.startup
.exit 0
cmpxchg8b qword ptr t
是什么意思?谢谢

21,458

社区成员

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

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