鱼C论坛

 找回密码
 立即注册
查看: 2476|回复: 5

王爽的课后题不解

[复制链接]
发表于 2013-6-10 01:03:21 | 显示全部楼层 |阅读模式
10鱼币
有两个问题,是王爽第十章的题,希望大家帮忙解答,
嘻嘻{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}
问题一:下面括号中指令的作用 ,我感觉只改变一下bx的值为0,没有其他作用了,对吗

assume cs:code

stack segment
        db 16 dup (0)
stack ends

code segment
                mov ax,4c00h
                int 21h

start:        mov ax,stack
                mov ss,ax
                mov sp,16
                mov ax,0
                push ax
             《mov bx,0》
                ret
code ends
end start



问题二:
题目是:下面程序执行后,ax的值为多少?
我的问题是下面括号中《add ax,bx》中的bx值不确定,所以每个人最后的ax值都不一样,我想的对吗?
   mov ax,0
   call far ptr s
   inc ax
s: pop ax
   add ax,ax
   pop bx
   add ax,bx

最佳答案

查看完整内容

第一个问题:还是有作用的,这个程序只是为了让你更加深刻的了解ret指令的原理,因为你把大小为一个字的数据0压入了栈中,执行ret指令后,IP的值改变了,IP的值变为了0,现在程序就跳转到了第一条指令(mov ax,4c00h)了 第二个问题:ax的值为1010h,注意这是个十六进制数,根据你这个帖子是看不出来bx是什么值的,你看看书上左边有对应的内存地址和机器码,这个还是为了让你加深call指令的使用,调用call指令时,CS和IP都入栈, ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-10 01:03:22 | 显示全部楼层
第一个问题:还是有作用的,这个程序只是为了让你更加深刻的了解ret指令的原理,因为你把大小为一个字的数据0压入了栈中,执行ret指令后,IP的值改变了,IP的值变为了0,现在程序就跳转到了第一条指令(mov ax,4c00h)了
第二个问题:ax的值为1010h,注意这是个十六进制数,根据你这个帖子是看不出来bx是什么值的,你看看书上左边有对应的内存地址和机器码,这个还是为了让你加深call指令的使用,调用call指令时,CS和IP都入栈,所以执行s标号后的(pop ax)指令后,ax值为0008h,就是之前压入栈中IP的值,之后(add ax,ax),ax变为0010h,再来(pop bx),bx变为1000h,这是之前压入栈中CS的值,(add ax,bx)你懂得
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-11 07:13:54 | 显示全部楼层
关注点在ret和call上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-12 09:54:34 | 显示全部楼层
第一问
单看一段代码可以省略。一个程序片段中,主要是为了进行中断现场的维护,防止传值到主程序中去所以调用的程序片段结束后往往要清理寄存器,而mov bx,0的做用就是清理bx寄存器的.这显然只是一些程序员的习惯
第二问
你发的这段代码片段不完整吧??
POP在栈里弹出,你没给出push的代码  或者是SS:SP的数据

评分

参与人数 1鱼币 +2 收起 理由
faly + 2 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-13 21:42:41 | 显示全部楼层
你的理解和我的理解一样。问题一:push ax后,栈顶元素为0,之后ret,IP值变为0,程序跳到mov ax, 4c00h,所以中间的mov bx, 0对程序的跳转是没有作用的
问题二,call far ptr s,执行的程序相当于push ip, push cs(当然程序指令是不会这样执行的,只是为了便于说明),这样,后面的程序执行后,ax = ip, bx = cs, cs的值与个人计算机有关,不是一个定值。

评分

参与人数 1鱼币 +2 收起 理由
faly + 2 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-24 19:55:53 | 显示全部楼层
楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 02:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表