首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

一段汇编代码(初级),有点有关问题,高人指点

2012-02-05 
一段汇编代码(初级),有点问题,高人指点。我将10000h-1001fh安排为代码段,并在里面存储如下代码:movax,1000h

一段汇编代码(初级),有点问题,高人指点。
我将10000h-1001fh安排为代码段,并在里面存储如下代码:
mov   ax,1000h
mov   ss,ax
mov   sp,0020h
mov   ax,cs
mov   ds,ax
mov   ax,[0]
add   ax,[2]
mov   bx,[4]
add   bx,[6]
push   ax
push   bx
pop   ax
pop   bx
为什么执行到mov   bx,[4]时就变成了mov   bx,[c804]了呢,下面的代码也变了。不知为什么,好像这里面没有对内存的写操作呀,为什么会这样呢,高手指点一下,指教了。

[解决办法]
将堆栈设置在了 20h, 这个在调试时会影响到指令的. 换个地方做堆栈吧
[解决办法]
还有就是指令后面跟的操作数是不是一定要是16进制表示的?比如mov ax,1122h和mov ax,1122实际上是一样的,我在debug中只能输入mov ax,1122而debug也把它认成16进制,不知是不是这样,还有要是想要输入2进制,10进制,8进制怎么办呢?

===============================
MASM 里你可以输入 mov ax,1122 这是十进制,当然也可以mov ax,1122d

mov ax,1122h 这是十六进制
mov ax,1100b 这是二进制
mov ax,1122o 这是八进制


[解决办法]
呃? 上面不是说了么. 将 mov sp, 0020h 改为 mov sp, 0040h 试试了
[解决办法]
唉, 调试时发生的中断产生的压栈造成的. 你看下中断后的各寄存器的内容, 就知道是哪个了. 从你说的来看, 中断部分还只使用了 16-1f 共 5 个 word, 其中最后的三个 word 分别是返回的 ip 和 cs 以及当时的 FlagReg; 至于前两个, 看其和哪些个寄存器内容相同, 大致就是谁了, 有雷同的话, 就改变下再试试看

热点排行