一个奇怪的问题
assume cs:code,ds:data,ss:stackdata segment
;0123456789ABCDEF
db 'welcome to masm!'
db 42h
data ends
stack segment
dw 16 dup(0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,40h
mov ax,0b800h
mov es,ax
mov bx,03c0h
mov ax,0为什么这个语句在DEBUG的时候,会变成mov ax,b800 ??????,,在DEBUG中按U查看时也是正常,就是在T执行的时候,会变,这是为什么???
mov di,040h
mov si,0
mov cx,3
这个问题出现的原因是在DEBUG模式下,动态调试器(例如: Turbo Debugger)对于某些指令的呈现方式可能会有所调整。在这种情况下,调试器以其认为更容易理解的方式来显示命令。
在你提供的代码中,`mov ax,0b800h`实际上是正确的写法,它将0B800H赋值给AX寄存器。但是,在DEBUG模式下,调试器可能选择以十六进制的表示形式显示,将其显示为`mov ax,b800h`,将字母B放在前面。
请注意,这只是调试器在显示时所做的一种选择,并不会影响程序的实际执行。所以,只需关注以正确的方式编写代码即可。这段代码在T执行时并不会改变。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,40h
mov ax,0b800h
. . . . . .
mov ax,0 ; 楼主眼睛没有花吧?只要这一句还没有被执行,eax 的值它就必须得是 0B800 啊 jackz007 发表于 2024-1-7 13:03
可能是我说的不够准确,是DEBUG到这一句时,后面的立即数,就是是B800,,
jackz007 发表于 2024-1-7 13:03
在DEBUG中,不是是mov ax,0,,,,而是mov ax,b800 本帖最后由 jackz007 于 2024-1-7 17:28 编辑
liuming1978 发表于 2024-1-7 14:56
在DEBUG中,不是是mov ax,0,,,,而是mov ax,b800
是啊,你代码的有这一句啊:
assume cs:code,ds:data,ss:stack
data segment
;0123456789ABCDEF
db 'welcome to masm!'
db 42h
data ends
stack segment
dw 16 dup(0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,40h
mov ax,0b800h <--- 在DEBUG 中你所看到的应该是这里。
mov es,ax
mov bx,03c0h
mov ax,0 <--- 你却认为自己看到的是这里 jackz007 发表于 2024-1-7 16:47
是啊,你代码的有这一句啊:
mov ax,0 <--- 你却认为自己看到的是这里
我在DEBUG中按t执行到这里时,,,,这句就变成了mov ax,b800,,不然怎么说奇怪呢
本帖最后由 jackz007 于 2024-1-7 18:57 编辑
liuming1978 发表于 2024-1-7 18:34
mov ax,0
在计算机面前,根本就没有所谓“奇怪”的现象,所有看起来 “奇怪” 的现象都是因为人在主观意识上的错误所导致的。
再仔细查一下,在你认为“奇怪”现象出现前,被你用 t 命令跟踪执行的上一条指令究竟是什么? jackz007 发表于 2024-1-7 18:46
在计算机面前,根本就没有所谓“奇怪”的现象,所有看起来 “奇怪” 的现象都是因为人在主观意 ...
mov bx,03c0h 本帖最后由 jackz007 于 2024-1-7 23:56 编辑
liuming1978 发表于 2024-1-7 23:13
mov bx,03c0h
如果说问题,最有可能是在堆栈,你定义的容量只有 20H 字节,却为 SP 赋值 40 H,这样,堆栈的上部 20 H 字节的空间实际上使用的是 CODE 段,也就是说,堆栈活动会直接破坏代码段开头的 20H 字节,而且,越靠近栈顶越危险。为了避免这个问题,可以考虑把堆栈扩大为 40 H,以便与堆栈初始化的代码相匹配。
stack segment
dw 20h dup(0)
stackends
jackz007 发表于 2024-1-7 23:49
如果说问题,最有可能是在堆栈,你定义的容量只有 20H 字节,却为 SP 赋值 40 H,这样,堆栈的 ...
我试试去 jackz007 发表于 2024-1-7 23:49
如果说问题,最有可能是在堆栈,你定义的容量只有 20H 字节,却为 SP 赋值 40 H,这样,堆栈的 ...
你是对的,,,谢谢
页:
[1]