第十章 call和ret指令
总介:call和ret指令都是转移指令,他们都能修改IP或同时修改CS和IP
1. ret和retf:
ret修改IP的内容,实现近转移。
CPU执行如下操作:
⑴(IP)=((SS)*16+(SP))
⑵(SP)=(SP)+2
可以看作: pop IP
retf修改CS和IP的内容,实现远转移。
CPU执行...


- [xiaofengcanyue] 用DEBUG试了一下确实是6,呵呵……之前只是凭自己的理解也不去多思考,太懒了!! 05/10 23:00
- [游客] 那当前的IP是什么? 05/10 20:44
- [xiaofengcanyue] 不是将当前的IP压入栈吗?!!你说的那个是在计算位移时用的吧? 05/10 18:41
- [starrynight] 显示效果 保存为f.asm编译连接后直接运行: C:\DOCUME~1\ADMINI~1\m 05/09 22:25
- [starrynight] 在执行call s 时先将IP值改为下一条指令的地址 ax=3 ? 1016的 16进制是 05/09 22:21
- [xiaofengcanyue] 我以为编译连接通过就可以了,原来还差的远呢!! 04/07 15:39
- [xiaofengcanyue] this is the answer !did by myself. not the title 04/07 15:30
- [tomato] 博主看运行结果了吗?至少自己得在机子上调试结果正确才行啊!博主的程序还有问题,博主还要继续找问题,改 04/03 09:46
- [tomato] Oh!The answer is here.I do see that blog first,and 04/03 09:37
- [tomato] Only the title,where's the answer? 04/03 09:25
- [游客] 算不上什么汇编高手啦,学得也很一般。没写汇编作业,是因为这个网站之前已经将这本书学完了。哎,我学习那 04/07 21:16
- [xiaofengcanyue] 我的也很一般,检测题还没做完呢!!呵呵,惭愧。还是应该深入研究的。既然喜欢了就不要放弃…… 03/24 08:01
- [游客] 你的汇编学得不错吧?我是学不来,考试就着急。 01/10 01:29
[2008-05-08 21:00] 第十章学习笔记
阅读全文 |
评论次数(0) |
浏览次数(750) |
所属类型(学习笔记)
[2008-03-31 21:26] 第六章包含多个段的程序
将数据和指令放在一个段内:
必须注明指令的开始。
END的重要用途: ① 通知编译器程序结束
② 还可以通知编译器程序的入口。
格式: start:…………end start start即程序的入口。
程序框架:
Assume cs:code
Code segment
数据
Start:
代码
Code ends
End start
将数据、代码和...
必须注明指令的开始。
END的重要用途: ① 通知编译器程序结束
② 还可以通知编译器程序的入口。
格式: start:…………end start start即程序的入口。
程序框架:
Assume cs:code
Code segment
数据
Start:
代码
Code ends
End start
将数据、代码和...
阅读全文 |
评论次数(0) |
浏览次数(734) |
所属类型(学习笔记)
[2008-03-30 20:50] 第五章学习笔记
读程序要逐句逐句的读!!!每句的结果都要记录出来。
INC 自增一。
LOOP:(格式)LOOP 标号 ,CPU执行到LOOP时①(CX)=(CX)-1;②判断CX中的值,不为零则转至标号处执行程序,如果为零则向下执行。
在执行LOOP时同时将CX减一。
原理:
Loop后面的标志符是一个地址,执行loop后将IP的地址改为标志符的地址。
要实现8位存储单元向16位赋值,要先将16位的前八位赋为零。
大于9FFFH的十六进制数据以字母开头,数据不能以字母开头,所以要在前面加个零!!!!
要通过DEBUG一次执行到想要,只要用g +跟踪的地址。
在MASM中:
MO...
INC 自增一。
LOOP:(格式)LOOP 标号 ,CPU执行到LOOP时①(CX)=(CX)-1;②判断CX中的值,不为零则转至标号处执行程序,如果为零则向下执行。
在执行LOOP时同时将CX减一。
原理:
Loop后面的标志符是一个地址,执行loop后将IP的地址改为标志符的地址。
要实现8位存储单元向16位赋值,要先将16位的前八位赋为零。
大于9FFFH的十六进制数据以字母开头,数据不能以字母开头,所以要在前面加个零!!!!
要通过DEBUG一次执行到想要,只要用g +跟踪的地址。
在MASM中:
MO...
阅读全文 |
评论次数(0) |
浏览次数(347) |
所属类型(学习笔记)
[2008-03-15 21:24] 寄存器操作总结
20根的数据总线可以访问1M字节
存储器的分段问题:
根据需要把1M字节空间划分成若干逻辑单元但必须满足:
① 逻辑段的开始地址必须是16的倍数;与寄存器长16位有关。
② 逻辑段的最大长度为64字节;与指针寄存器长16位有关。
因此1M内存最多划分成64K个逻辑单元最少也有16K个单元。
逻辑段可以相连也可以部分重叠!!!
看到这里终于明白地址为什么要用段地址加偏移地址来表了,因为存储器的段并不是相连的,且段地址必须为16位的倍数。
寄存器的寻址方式:
...
存储器的分段问题:
根据需要把1M字节空间划分成若干逻辑单元但必须满足:
① 逻辑段的开始地址必须是16的倍数;与寄存器长16位有关。
② 逻辑段的最大长度为64字节;与指针寄存器长16位有关。
因此1M内存最多划分成64K个逻辑单元最少也有16K个单元。
逻辑段可以相连也可以部分重叠!!!
看到这里终于明白地址为什么要用段地址加偏移地址来表了,因为存储器的段并不是相连的,且段地址必须为16位的倍数。
寄存器的寻址方式:
...
阅读全文 |
评论次数(3) |
浏览次数(396) |
所属类型(学习笔记)
[2007-11-22 22:00] debug的命令
R命令查看、改变CPU寄存器的内容;
D命令查看内存中的内容;
E命令改写内存中的内容;
U命令将内存中的机器指令翻译成汇编指令;
T命令执行一条机器指令;
A命令以汇编指令的格式在内存中写入一条机器指令;
用的时候要注意格式!!...
D命令查看内存中的内容;
E命令改写内存中的内容;
U命令将内存中的机器指令翻译成汇编指令;
T命令执行一条机器指令;
A命令以汇编指令的格式在内存中写入一条机器指令;
用的时候要注意格式!!...
阅读全文 |
评论次数(2) |
浏览次数(372) |
所属类型(学习笔记)
页码数(1):
1