汇编新手,一个栈的小问题
时间:2011-01-25
来源:互联网
我是一名汇编新手,目前在看的是王爽的汇编语言,在他的一个例子中,我遇到个问题
原例:
完成下例程序,得用栈,将程序定义的数据逆序存入,
Assembly code
他给出的代码:
Assembly code
按着题意,运行后内存的数据应为
cs:0000 23 01 56 04 89 07 bc 0a ef 0d ed 0f ba 0c 87 09
cs:0010 87 09 bc 0c ed 0f ef 0d bc 0a 89 07 56 04 23 01
我照着例子,分析他的代码,第一个dw定义的数据地址应在 cs:0000 - cs:000F
第二个dw定义的数据应在 cs:0010 - cs:0001F
程序入口在cs:0020,SS:IP 应在 cs:0030,从逻辑上他的代码貌似就实现不了,
我自己也写了一段代码,能复制前面几个数据,后面就冒出奇怪的数据,
望高人解答,是我理解错了,还是这段代码达不到这个意思...
原例:
完成下例程序,得用栈,将程序定义的数据逆序存入,
Assembly code
assume cs:codesg codesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h ? codesg ends end
他给出的代码:
Assembly code
assume cs:codesg codesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0 start: mov ax,cs mov ss,ax ;将栈的段地址指向程序入口段地址 mov sp,30h ;设置偏移地址,此时栈顶地址应是 ss:0030 mov bx,0 mov cx,8 s: push cs:[bx] ;取出cs:bx中的数据压入栈顶 add bx,2 loop s ;循环操作 mov bx,0 mov cx,8 s0: pop cs:[bx] ;弹出栈内元素 add bx,2 loop s0; mov ax,4c00h int 21h codesg ends end start
按着题意,运行后内存的数据应为
cs:0000 23 01 56 04 89 07 bc 0a ef 0d ed 0f ba 0c 87 09
cs:0010 87 09 bc 0c ed 0f ef 0d bc 0a 89 07 56 04 23 01
我照着例子,分析他的代码,第一个dw定义的数据地址应在 cs:0000 - cs:000F
第二个dw定义的数据应在 cs:0010 - cs:0001F
程序入口在cs:0020,SS:IP 应在 cs:0030,从逻辑上他的代码貌似就实现不了,
我自己也写了一段代码,能复制前面几个数据,后面就冒出奇怪的数据,
望高人解答,是我理解错了,还是这段代码达不到这个意思...
作者: xzxw1115 发布时间: 2011-01-25
不好意思,上面代码dw定义中少了个0,加上
dw 0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0
作者: xzxw1115 发布时间: 2011-01-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28