小名叫(DAD) 发表于 2012-8-22 20:41:06

王爽的汇编语言实验三

本帖最后由 小名叫(DAD) 于 2012-8-23 14:48 编辑

我是新手,刚学汇编语言,做这个实验三的时候,做到POP AX 就说CPU遇到无效指令,想知道为什么!谢谢!
实验3的如下:

assume cs:qq
   qq segment
   mov ax,2000h
   mov ss,ax
   mov sp,0
   add sp,4
   pop ax
   pop bx
   push ax
   push bx
   pop ax
   pop bx
mov ax,4c00h
int 21h
qq ends
end




メ㊣逆ご帅☆ 发表于 2012-8-22 20:41:07

本帖最后由 メ㊣逆ご帅☆ 于 2012-8-23 09:59 编辑

下面那位说的是错的哦。。pop 指令并不会修改数据push才会,况且2000h地方好像很安全
add sp,6就行(当然也可以更大的数值,5我没试过)
因为DEBUG要先中断后才会去执行你写的程序
中断会保存Flags,cs,ip(不知道会不会保存其他的),如果为6可以避免栈顶越界而产生非法操作被T掉


我SP修改成6后POP两次仍然会涉及SP为4的地方却没被T,证明下面是错滴


walykyy 发表于 2012-8-22 21:47:10

因为你用的那段栈空间里面有系统占用的数据,所以不让你pop,你可以在安全空间测试你的程序

(^o^)/ 发表于 2012-8-23 08:19:50

(^o^)/ 发表于 2012-8-23 08:49:57

(^o^)/ 发表于 2012-8-23 08:51:37

(^o^)/ 发表于 2012-8-23 08:52:14

(^o^)/ 发表于 2012-8-23 08:52:51

(^o^)/ 发表于 2012-8-23 08:53:35

(^o^)/ 发表于 2012-8-23 08:54:18

(^o^)/ 发表于 2012-8-23 08:54:56

(^o^)/ 发表于 2012-8-23 08:55:56

(^o^)/ 发表于 2012-8-23 08:56:52

(^o^)/ 发表于 2012-8-23 08:57:53

F_S_W 发表于 2012-8-23 14:08:36

你换个段地址试试。。。

小名叫(DAD) 发表于 2012-8-23 14:48:45

メ㊣逆ご帅☆谢谢这位大神,4,5都不行 6是可以的 别的没有试。才学不懂你说的中断 但是谢谢你

lyoal 发表于 2012-10-23 09:17:31

我也遇到了同样的问题,我的是本本。楼主的是什么硬件?

16511232 发表于 2013-1-27 16:03:57

你看的书应该是第一版
在第二版中是
add sp,10
页: [1]
查看完整版本: 王爽的汇编语言实验三