汇编笔记 RETF

assume cs:code

stack segment

db 16 dup(0)

stack ends

code segment

start:				mov ax,stack;将定义字形数据送入AX
					mov ss,ax;送入桟空间
					mov sp,16;定义桟长度

					mov ax,1000h ;将1000H送入AX中
					push ax;将AX送入桟中,保护数据
					mov ax,0;将AX设置为0
					push ax;然后再继续送入桟中,保护数据
					retf ;转移指令,依次POP 桟中数据。 POP IP, POP CS

					mov ax,4c00h
					int 21h
code ends
end start

执行RETF指令时,将进行4步操作:

IP = SS * 16 + SP

SP = SP +2

CS = SS*16 = SP

SP = SP -2

CPU执行REFT的时候,相当于进行了:

POP IP

POP CS

时间: 2024-08-07 08:57:59

汇编笔记 RETF的相关文章

王爽汇编笔记

  第一章 内存地址空间的地址段分配 地址:0~7FFFH的32kb空间为主随机存储器的地址空间 地址:8000~9FFFH的8kb空间为显存地址空间 地址:A000~FFFFH的24kb空间为各个rom的地址空间   第二章 进入DOS模式 重新启动计算机,进入DOS模式,此时进入的是实模式的DOS 在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS   使用命令 -R 查看寄存器内容 -R 寄存器 可以修改寄存器的内容 -D查看内存中的内容 –D 段地址:偏移地址 输入后

汇编笔记 RET

assume cs:code,ss:stack 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 以上指令,让IP指向0000,程序正常退出. 执行PUSH AX的时候,将AX中的数据放入桟中,SP=SP-2. 执行ret指令

汇编笔记(1)

最近看王爽的汇编语言,同时配合小甲鱼的视频看了一些章节,对于一些知识点还有一些容易混淆的地方在这里总结一下,希望大家来指正. 第一章: 基础知识 一.汇编语言 计算机只识别机器码(0和1组成),非常难认,因此产生了汇编. 三类指令:汇编指令,伪指令,其他符号(由编译器识别). 二.存储器 数据和指令存放的地方.其实就是所说的内存. CPU的正常工作,就必须向它提供数据和指令. 指令和数据没有任何区别,都是二进制.CPU在工作时候,有的信息看作指令,有的信息看作数据. 每个存储单元从0开始顺序编号

汇编笔记二【32位通用寄存器 以及 常用汇编指令】

一.32位通用寄存器(EAX,ECX,EDX,EBP,ESP,EBP,ESI,EDI) 二.十六位通用寄存器(AX,CX,DX,BX,SP,BP,SI,DI) 三.八位通用寄存器(AH,AL,CH,CL,DH,DL,BH,BL) 四.32位,16位,8位寄存器之间的关系 1.寄存器都是高位在前,低位在后. 2.都是包含关系,32位寄存器之中包含了16位寄存器,16位寄存器之中包含了8位寄存器. 关系如下: 五.32位的含义 一位只能放0或1,32位就意味着能放32个0或1. 所以32位最小取值为

汇编笔记_1

-------1.1 机器语言--------- 机器语言是机器指令的集合进制转换十位,八位,十六位(H) ------1.2 汇编语言的产生------ 汇编语言的主体是汇编指令汇编指令和机器指令的差别在于指令的表示方法上.汇编指令是机器指令便于记忆的书写格式.汇编指令是机器指令的助记符 例如:   机器指令:1000100111011000   操作:寄存器BX的内容送到AX中   汇编指令:MOV AX,BX 寄存器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器(寄存器更

汇编笔记三【寻址公式】

一.寻址方式一: 立即数寻址:[立即数] 例: 读取内存的值: MOV EAX,DWORD PTR DS:[0xFFFFFFFF] 向内存中写入数据: MOV DWORD PTR DS:[0xFFFFFFFF],eax 获取内存地址: LEA EAX,DWORD PTR:DS[0xFFFFFFFF] 二.寻址方式二: 寄存器寻址:[reg] reg代表寄存器,可以是8个寄存器中的任意一个 例: 读内存中的值: MOV EAX DWORD PTR DS:[ECX] 向内存中写入数据: MOV DW

汇编笔记一【计算机数据宽度与逻辑运算】

一.进制的定义 由N个符号组成,满N则向上进位1. 二.常用的数据类型 1BYTE(字节)=8BIT(位) 1WORD(字)=2BYTE(字节)=16BIT(位) 1DWORD(双字)=2WORD(字)=4BYTE(字节)=32BIT(位) 三.二进制的逻辑运算符 A.逻辑运算符or(中文名:或运算 C对应符号:|) 定义:两个数只要有一个为1,结果就是1. 例子: B.逻辑运算符and(中文名:与运算 c对应符号:&) 定义:两个数都是1,结果才是1 例子: C.异或运算符xor(中文名:异或

汇编笔记

(1)C 语言中 extern 变量和 global 变量有什么区别 extern只是表示这个变量定义在其他编译单元(通常是不同的源文件)而定义在全局作用域内部的变量,成为全局变量.换言之,global变量不一定有extern修饰而有extern修饰的必然是global变量. (2).text .global 这是什么意思?.text.global _start_start: .text .global 是arm-gcc编译器的关键词..text 指定了后续编译出来的内容放在代码段[可执行];

汇编笔记四【标识寄存器】 by:凉游浅笔深画眉 / Net7Cracker

一.push xxxxx指令和ESP的关系 ESP的值,是由Push指令后面的操作数的宽度决定的.也就是xxxxx的宽度,假如Puh后面跟的是一个立即数,由于整数是四字节,所以esp-4. 假如Push 后面跟的是容器,那么就看这个容器的宽度. 例:假如目前ESP的值是FFFFFFFF 当PUSH 1 这条指令执行后,ESP=FFFFFFFB,因为1是个立即数,只要Push后面是立即数,那么ESP的值就会减4 例:假如目前ESP的值是FFFFFFFF 当PUSH ax 这条指令执行后,ESP=F