32位汇编语言
16位与32位汇编语言常用指令总结

16位与32位汇编语言常用指令总结在计算机编程领域,汇编语言被广泛应用于底层程序设计,直接操作计算机硬件。
其中,16位和32位汇编语言是常见的两种类型。
本文将总结这两种汇编语言中常用的指令,帮助读者更好地理解和应用它们。
一、16位汇编语言常用指令1. 数据传送指令- MOV:将数据从一个寄存器或内存位置传送到另一个寄存器或内存位置。
- XCHG:交换两个寄存器或内存位置的数据。
2. 算术运算指令- ADD/SUB:实现加法和减法运算。
- MUL/IMUL:实现无符号与有符号乘法运算。
- DIV/IDIV:实现无符号与有符号除法运算。
3. 逻辑运算指令- AND/OR/XOR:实现与、或、异或逻辑运算。
- NOT:对操作数进行按位取反操作。
4. 条件转移指令- JMP:无条件跳转到指定地址。
- JZ/JNZ:根据零标志位(ZF)的值进行跳转。
- JC/JNC:根据进位标志位(CF)的值进行跳转。
5. 循环指令- LOOP:根据计数器的值进行循环。
- JCXZ/JECXZ:根据CX/ECX寄存器的值进行循环。
二、32位汇编语言常用指令1. 数据传送指令- MOV:同16位汇编语言中的指令,用于数据传送。
- PUSH/POP:将数据推入栈或从栈中弹出。
2. 算术运算指令- ADD/SUB:同16位汇编语言中的指令,用于加法和减法运算。
- MUL/IMUL:同16位汇编语言中的指令,用于乘法运算。
- DIV/IDIV:同16位汇编语言中的指令,用于除法运算。
3. 逻辑运算指令- AND/OR/XOR:同16位汇编语言中的指令,用于逻辑运算。
- NOT:同16位汇编语言中的指令,用于按位取反。
4. 条件转移指令- JMP:同16位汇编语言中的指令,用于无条件跳转。
- JZ/JNZ:同16位汇编语言中的指令,根据零标志位(ZF)进行跳转。
- JB/JNB:根据低位借位标志位(CF)进行跳转。
5. 循环指令- LOOP:同16位汇编语言中的指令,用于循环操作。
32位汇编语言习题及答案(全部)(钱晓捷版)

简答题1.1 简答题-1 (1)哪个处理器的指令系统成为Intel 80x86系列处 哪个处理器的指令系统成为Intel 80x86系列处 理器的基本指令集? 理器的基本指令集? • 8086 什么是通用寄存器? (3)什么是通用寄存器? • 一般指处理器最常使用的整数寄存器,可用于保存 一般指处理器最常使用的整数寄存器, 整数数据、 整数数据、地址等 最高有效位MSB是指哪一位? MSB是指哪一位 (6)最高有效位MSB是指哪一位? • 数据的最高位,例如对8、16、32位数据,MSB依次 数据的最高位,例如对8 16、32位数据 MSB依次 位数据, 指D7、D15和D31位
DS是数据段寄存器名 DS是数据段寄存器名 6364b 6364b是数字开头 @data是汇编语言使用预定义符号 是汇编语言使用预定义符号, @data是汇编语言使用预定义符号,表示数据段地址 flat是表示平展存储模型的关键字 flat是表示平展存储模型的关键字
10
习题解答
习题1.16 习题1.16
32位汇编语言习题解答 32位汇编语言习题解答
课件制作: 课件制作: 钱晓捷
钱晓捷,32位汇编语言程序设计,机械工业出版社 钱晓捷,32位汇编语言程序设计, 位汇编语言程序设计
第1章习题:汇编语言基础 章习题:
简答题( 1.1 简答题(1、3、6、7、8) 判断题( 1.2 判断题(1、6、7、8、9) 填空题 10) 1.3 填空题(3、4、5、7、10) 13、 15、 1.9、1.13、1.15、1.16
3
习题解答
简答题1.1 简答题-2 (7)汇编语言中的标识符与高级语言的变量和常量名 的组成原则有本质的区别吗? 的组成原则有本质的区别吗? • 没有 汇编语言的标识符大小写不敏感意味着什么? (8)汇编语言的标识符大小写不敏感意味着什么? • 表示字母大小写不同、但表示同一个符号 表示字母大小写不同、
32位汇编入门知识

32位汇编入门知识汇编语言和CPU以及内存,端口等硬件知识是连在一起的. 这也是为什么汇编语言没有通用性的原因. 下面简单讲讲基本知识(针对INTEL x86及其兼容机) ============================x86汇编语言的指令,其操作对象是CPU上的寄存器,系统内存,或者立即数. 有些指令表面上没有操作数, 或者看上去缺少操作数, 其实该指令有内定的操作对象, 比如push指令, 一定是对SS:ESP指定的内存操作, 而cdq的操作对象一定是eax / edx.在汇编语言中,寄存器用名字来访问. CPU 寄存器有好几类, 分别有不同的用处:1. 通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP(这个虽然通用,但很少被用做除了堆栈指针外的用途)这些32位可以被用作多种用途,但每一个都有"专长". EAX 是"累加器"(acc umulator), 它是很多加法乘法指令的缺省寄存器. EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址. ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器. EDX是...(忘了..哈哈)但它总是被用来放整数除法产生的余数. 这4个寄存器的低16位可以被单独访问,分别用AX,BX,CX和DX. AX又可以单独访问低8位(AL)和高8位(AH), BX,CX,DX也类似. 函数的返回值经常被放在EAX中.ESI/EDI分别叫做"源/目标索引寄存器"(source/destination index),因为在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串.EBP是"基址指针"(BASE POINTER), 它最经常被用作高级语言函数调用的"框架指针"(frame pointer). 在破解的时候,经常可以看见一个标准的函数起始代码:push ebp ;保存当前ebpmov ebp,esp ;EBP设为当前堆栈指针sub esp, xxx ;预留xxx字节给函数临时变量....这样一来,EBP 构成了该函数的一个框架, 在EBP上方分别是原来的EBP, 返回地址和参数. EBP下方则是临时变量. 函数返回时作 mov esp,ebp/pop ebp/ ret 即可.ESP 专门用作堆栈指针.2. 段寄存器:CS(Code Segment,代码段) 指定当前执行的代码段. EIP (Instruction po inter, 指令指针)则指向该段中一个具体的指令. CS:EIP指向哪个指令, CPU 就执行它. 一般只能用jmp, ret, jnz, call 等指令来改变程序流程,而不能直接对它们赋值.DS(DATA SEGMENT, 数据段) 指定一个数据段. 注意:在当前的计算机系统中,代码和数据没有本质差别, 都是一串二进制数, 区别只在于你如何用它. 例如, CS 制定的段总是被用作代码, 一般不能通过CS指定的地址去修改该段. 然而,你可以为同一个段申请一个数据段描述符"别名"而通过DS来访问/修改. 自修改代码的程序常如此做.ES,FS,GS 是辅助的段寄存器, 指定附加的数据段.SS(STACK SEGMENT)指定当前堆栈段. ESP 则指出该段中当前的堆栈顶. 所有push/pop 系列指令都只对SS:ESP指出的地址进行操作.3. 标志寄存器(EFLAGS):该寄存器有32位,组合了各个系统标志. EFLAGS一般不作为整体访问, 而只对单一的标志位感兴趣. 常用的标志有:进位标志C(CARRY), 在加法产生进位或减法有借位时置1, 否则为0.零标志Z(ZERO), 若运算结果为0则置1, 否则为0符号位S(SIGN), 若运算结果的最高位置1, 则该位也置1.溢出标志O(OVERFLOW), 若(带符号)运算结果超出可表示范围, 则置1.JXX 系列指令就是根据这些标志来决定是否要跳转, 从而实现条件分枝. 要注意,很多JXX 指令是等价的, 对应相同的机器码. 例如, JE 和JZ 是一样的,都是当Z=1是跳转. 只有JMP 是无条件跳转. JXX 指令分为两组, 分别用于无符号操作和带符号操作. JXX 后面的"XX" 有如下字母:无符号操作: 带符号操作:A = "ABOVE", 表示"高于" G = "GREATER", 表示"大于"B = "BELOW", 表示"低于" L = "LESS", 表示"小于"C = "CARRY", 表示"进位"或"借位" O = "OVERFLOW", 表示"溢出" S = "SIGN", 表示"负"通用符号:E = "EQUAL" 表示"等于", 等价于Z (ZERO)N = "NOT" 表示"非", 即标志没有置位. 如JNZ "如果Z没有置位则跳转" Z = "ZERO", 与E同.如果仔细想一想,就会发现 JA = JNBE, JAE = JNB, JBE = JNA, JG = JNLE, JGE= JNL, JL= JNGE, ....4. 端口端口是直接和外部设备通讯的地方。
32位汇编语言08

DOS是单用户单任务操作系统 DOS系统只有一个特权级别 程序可以访问任意资源
基于Windows保护方式的一个8086仿真环境
第8章 DOS环境的程序设计
• Windows操作系统模拟有一个MS-DOS环境
3
DOS编程的注意事项
• 16位DOS环境默认采用16位操作数尺寸
主要使用16位或8位寄存器、操作数和寻址方式 堆栈以16位为单位压入PUSH和弹出POP数据
9
第8章 DOS环境的程序设计
〔例8-1〕DOS应用程序
include io16.inc ;包含16位输入输出文件 .data ;数据段 msg byte 'Hello, Assembly!',13,10,0 ;定义要显示的字符串 .code ;代码段 start: ;程序起始位置 mov ax,@data mov ds,ax mov eax,offset msg ;指定字符串的偏移地址 call dispmsg ;调用I/O子程序显示信息 exit 0 ;程序正常执行结束 end start ;汇编结束
19
第8章 DOS环境的程序设计
〔例8-3〕字符串复制程序-2
mov mov mov cld rep mov mov int end esi,offset srcmsg edi,offset dstmsg ecx,lengthof srcmsg movsb ah,9 edx,offset dstmsg 21h start
dispm1:
dispm2:
dispmsg
pop edx pop ebx pop eax ret endp
15
第8章 DOS环境的程序设计
32位汇编语言

(2)段式存储模型(Segmented Memory Model)
(3)实地址存储模型(Real-address Memory Model)
8086处理器的存储模型 段式存储模型的特例 线性地址空间最大为1MB容量,段最大为64KB
第1章 汇编语言基础
22
2. 工作方式
(1)保护方式(Protected Mode)
为操作系统等核心程序提供处理器控制功能 指令系统、指令集(Instruction Set)
4
第1章 汇编语言基础
1.1.2 IA-32处理器
• 80386引入英特尔32位指令集结构ISA
兼容原16位80286指令系统 全面升级为32位 提供虚拟8086工作方式(Virtual 8086 Mode)
(2)实地址方式(Real-address Mode)
(3)系统管理方式(System Management Mode)
23
实现供节能和系统安全管理
第1章 汇编语言基础
3. 逻辑地址(Logical Address)
• 在处理器内部、程序员编程时采用的地址 • 逻辑地址=段基地址∶偏移地址
段基地址=在主存中的起始地址 偏移地址=距离段基地址的位移量
• 某个存储单元可以有多个逻辑地址,但只有一
个唯一的物理地址
编程使用 处理器转换 地址总线输出
逻辑地址
24
线性地址
物理地址
示意图 第1章 汇编语言基础
基本段的逻辑地址
• 代码段(Code
Segment)
主存空间
基于汇编语言的32位二进制、十进制转换及应用

基于汇编语言的32位二进制、十进制转换及应用汇编语言是一种底层的编程语言,它可以直接操作计算机硬件,具有高效性和灵活性。
在计算机系统中,二进制和十进制是两种常见的数值表示方式。
本文将介绍如何使用汇编语言实现32位二进制和十进制之间的转换,并讨论其在实际应用中的作用。
首先,我们需要了解32位二进制和十进制的表示方法。
32位二进制是由32个二进制位组成的数值,每个位上可以是0或1,可以表示的数值范围是0到2的32次方减1。
而十进制是由0到9这10个数字组成的数值,每个数字的权值是10的某次方,例如123表示1*10^2+2*10^1+3*10^0=123。
在汇编语言中,我们可以使用位运算符和乘除法运算符来进行二进制和十进制的转换。
下面是一个将32位二进制转换为十进制的简单例子:```assemblymov eax, 10101010101010101010101010101010b ; 将二进制数赋值给eax寄存器mov ebx, 0 ; 初始化十进制数为0mov ecx, 1 ; 初始化权值为1loop:shr eax, 1 ; 右移一位,相当于除以2jnc skip ; 如果最低位是0,跳过加法add ebx, ecx ; 加上当前权值skip:add ecx, ecx ; 权值乘以2 cmp ecx, 100000000h ; 判断是否超出32位jnc done ; 如果超出32位,跳出循环jmp loop ; 继续循环done:; 十进制数已经存储在ebx寄存器中```以上代码使用了循环和条件判断语句,每次将二进制数右移一位,判断最低位是否为1,如果是则加上当前权值,否则跳过加法。
最后判断权值是否超出32位,如果是,则跳出循环,十进制数已经存储在ebx寄存器中。
除了将二进制转换为十进制,我们还可以将十进制转换为二进制。
下面是一个将十进制转换为32位二进制的简单例子:```assemblymov eax, 123 ; 将十进制数赋值给eax寄存器mov ebx, 0 ; 初始化二进制数为0mov ecx, 1 ; 初始化权值为1loop:cmp ecx, 100000000h ; 判断是否超出32位jnc done ; 如果超出32位,跳出循环cmp eax, ecx ; 判断是否小于当前权值jb skip ; 如果小于,跳过or ebx, ecx ; 将当前权值设置为1sub eax, ecx ; 减去当前权值skip:add ecx, ecx ; 权值乘以2 jmp loop ; 继续循环done:; 二进制数已经存储在ebx寄存器中```以上代码使用了循环和条件判断语句,每次将当前权值与十进制数进行比较,如果小于当前权值,则跳过,否则将当前权值设置为1,并从十进制数中减去当前权值。
32位汇编指令

用OD和CE,总不断找汇编资料,解读指令,实在是累。
总算找到篇比较完整的资料,与大家分享。
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
汇编语言32位乘法

assume cs:code,ds:datadata segmentNA dw 0F321H,09AFCHNB dw 08818H,0301DH;-------第一个字是等待相乘的数的高16位,第二个是低十六位T1 dw 0,0,0T2 dw 0,0,0;-------32位数乘以16位数不可能大于48位,所以分配3个字R dw 0,0,0,0;-------32位数乘以32位数不可能大于64位,所以为结果分配4个字data endscode segmentstart:mov ax,datamov ds,ax;-------初始化段寄存器Step1:mov ax,NA+2mov bx,NB+2mul bxmov T1+4,axmov cx,dx;-------Number A的低16位乘以Number B 的低十六位,结果存入T1+4 ;进位存入CXmov ax,NAmov bx,NB+2mul bxmov T1+2,axadd T1+2,cxadc T1,dx;-------Number A的高16位乘以Number B 的低十六位,结果存入T1+4 ;结果存入T1+2,将T1+2与上一次相乘的进位相加存入T1+2;将第二次相乘的进位带符号相加入T1(前一位的相加可能产生进位) Step2:mov ax,NA+2mov bx,NBmul bxmov T2+4,axmov cx,dx;-------同理mov ax,NAmov bx,NBmul bxmov T2+2,axadd T2+2,cxadc T2,dx;-------同理SUM:mov ax,T1+4mov R+6,axmov ax,T2+4add T1+2,axmov ax,T1+2mov R+4,axmov ax,T2+2adc T1,axmov ax,T1mov R+2,axmov ax,T2adc R,ax;-------错位相加mov ax,4C00Hint 21Hcode endsend start原理图:NA NA+2×NB NB+2——————————————————T1 T1+2 T1+4+T2 T2+2 T2+4——————————————————R R+2 R+4 R+6编写一个程序,从键盘上连续输入多个字符,遇到“$”时终止,然后以与输入相反的顺序将该字符串以大写的形式在屏幕上显示出来要求:用“先进后出”的设计思路,使用堆栈技术,结合DOS的中断调用,实现输入字符串的倒序显示CODE SEGMENT ;作业ASSUME CS:CODE,ds:codeorg 100hSTART:push cspop dscldlea dx,msgmov ah,9int 21h ;提示xor cx,cxt0:mov ah,1int 21h ;接收数据cmp al,'$' ;'$'结束程序jz showcmp al,'a'jb y1cmp al,'z'ja y1sub al,20h ;小写转大写y1:inc cxpush axjmp t0jcxz quitshow:mov al,0dhinc cxpush axmov al,0ahinc cxpush ax ;字符串倒序输出mov cx,cxnext:pop dxmov ah,2int 21hloop nextquit:mov ah,1int 21h ;等待MOV AX,4C00HINT 21Hmsg db 09,'Input a string...',0dh,0ah,'$'CODE ENDSEND START。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
混合编程、取长补短
35
学习汇编语言的意义
第1章 汇编语言基础
汇编语言的主要应用场合
• 程序要具有较快的执行时间,或者只能占用较
小的存储容量 • 程序与计算机硬件密切相关,程序要直接、有 效地控制硬件 • 大型软件需要提高性能、优化处理的部分 • 没有合适的高级语言、或只能采用汇编语言的 时候 • 分析具体系统尤其是该系统的低层软件、加密 解密软件、分析和防治计算机病毒等等
状态标志:记录指令执行结果的辅助信息 控制标志:方向标志DF,仅用于串操作指令 系统标志:控制操作系统或核心管理程序的操作 方式
示意图 第1章 汇编语言基础
13
处理器最基本的标志:状态标志
• 用来记录指令执行结果的辅助信息 • 加减运算和逻辑运算指令主要设置它们 • 其他有些指令的执行也会相应地设置它们 • 处理器主要使用其中5个构成各种条件,分支
第1章 汇编语言基础
• 每个存储单元以字节为基本存储单位
18
1. 存储模型
• 物理存储器以字节为基本存储单位 • 每个存储单元被分配一个唯一的地址 • 这个地址就是物理地址 • 物理地址空间从0开始顺序编排,直到处理器支持的
最大存储单元
8086处理器支持1MB存储器:00000H~FFFFFH IA-32处理器支持4GB存储器:00000000H~FFFFFFFFH
• 操作系统利用存储管理单元进行存储管理,程序并
不直接寻址物理存储器 • IA-32 处理器提供 3 种存储模型,用于程序访问存储 器
示意图
20
第1章 汇编语言基础
IA-32处理器的存储模型
(1)平展存储模型(Flat Memory Model)
存储器是一个连续的地址空间:线性地址空间 IA-32处理器支持4GB容量线性地址空间 存储器由一组独立的地址空间:段(Segment) 每个段都可以达到4GB容量 在处理器内部,所有的段都被映射到线性地址空间
11
既是一个整体 又可独立使用
16 15 87 0
AH AX
AL
EAX
第1章 汇编语言基础
通用寄存器的名称
EAX EBX ECX EDX ESI EDI EBP ESP
12
Accumulator Base Counter Data Source Index Destination Index Base Pointer Stack Pointer
指令判断这些条件实现程序分支
15 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF
0
AF
0
PF
1
CF
8086的标志
15
第1章 汇编语言基础
3. 指令指针寄存器EIP
• 保存将要执行的指令在主存的存储器地址 • EIP是专用寄存器
顺序执行时自动增量(加上该指令的字节数), 指向下一条指令 分支、调用等操作时执行控制转移指令修改,引 起程序转移到指定的指令执行 出现中断或异常时被处理器赋值而相应改变
数据或指令
第1章 汇编语言基础
平展模型
• 平展存储模型是分段存储模型的一种
特例 • 所有的段都有相同的段基地址(基地 址为0),都重合于同一个线性地址空 间 •IA-32 微处理器上运行的应用程序, 广泛采用平展存储模型。
28
第1章 汇编语言基础
• 分页机制
• 不采用分页管理机制,线性地址就是
对应的物理地址空间 • 采用了分页管理机制,则要将线性空 间地址映射到物理地址 • 当微处理器既采用段式存储管理,又 采用页式存储管理就是段页式存储管 理方式
主存空间
堆栈段 数据段 指令段
程 序
17
第1章 汇编语言基础
1.2.3 存储器组织
• 主存储器容量很大,被划分成许多存储单元 • 每个存储单元被编排一个号码
即存储单元地址 称为存储器地址(Memory Address) 即字节编址(Byte Addressable) 一个字节(Byte)等于8个二进制位(Bit) 二进制位是计算机存储信息的最小单位 16位(2个字节)构成一个字(Word) 32位(4个字节)构成一个双字(Double Word)示意图
奔腾4 奔腾III 奔腾II 奔腾 80486 80386 IA-32处理器
80286 8086 4004
3
16位80x86处理器
第1章 汇编语言基础
1.1.1 16位80x86处理器
• 16位结构处理器 • 8086/8088指令系统提供16位基本指令集 • 80186/80188增加若干条实用指令 • 8086的工作方式是实方式(Real Mode) • 80286增加保护方式(Protected Mode) • 80286引入了系统指令
• 继续丰富多媒体指令 • 处理器集成多核(Multi-core)技术
Many core
处理器进入多核时代
6
第1章 汇编语言基础
1.2 个人计算机系统
• 硬件(Hardware):物理设备 • 软件(Software):程序和文档
微型计算机系统 微型计算机
运算器 控制器 寄存器组
主存储器 总线 输入输出接口电路
为操作系统等核心程序提供处理器控制功能 指令系统、指令集(Instruction Set)
4
第1章 汇编语言基础
1.1.2 IA-32处理器
• 80386引入英特尔32位指令集结构ISA
兼容原16位80286指令系统 全面升级为32位 提供虚拟8086工作方式(Virtual 8086 Mode)
段基地址=在主存中的起始地址 偏移地址=距离段基地址的位移量
• 某个存储单元可以有多个逻辑地址,但只有一
个唯一的物理地址
编程使用 处理器转换 地址总线输出
逻辑地址
24
线性地址
物理地址
示意图 第1章 汇编语言基础
基本段的逻辑地址
• 代码段(Code
Segment)
主存空间
段基地址:代码段寄存器CS指示 偏移地址:指令指针寄存器EIP保存
第1章 汇编语言基础
1.1 英特尔80x86处理器 1.2 个人计算机系统 1.3 汇编语言程序格式
第1章 汇编语言基础
了解软硬件开发环境 熟悉通用寄存器和存储器组织 掌握汇编语言的 语句格式、程序框架和开发方法
1.1 英特尔80x86处理器
Intel 64处理器
Intel 8086
酷睿多核系列 奔腾多核系列
微处理器
外部设备
7
软件
第1章 汇编语言基础
1.2.1 硬件组成
系统总线 CPU 运算器 主存储器 辅助存储器 I/O 接 口 输入设备 输出设备
控制器 寄存器
汇编语言程序员将硬件抽象为: 寄存器、存储器地址和输入输出地址
8
第1章 汇编语言基础
1.2.2 寄存器(Register)
• 处理器内部的高速存储单元 • 用于暂时存放程序执行过程中的代码和数据 • 透明寄存器
(2)段式存储模型(Segmented Memory Model)
(3)实地址存储模型(Real-address Memory Model)
8086处理器的存储模型 段式存储模型的特例 线性地址空间最大为1MB容量,段最大为64KB
第1章 汇编语言基础
22
2. 工作方式
(1)保护方式(Protected Mode)
应用程序起始地址
32
第1章 汇编语言基础
1.2.4 程序设计语言
• 机器语言(Machine
Language)
底层的计算机语言,对应机器指令 指令是处理器的母语 形成目标(代码)程序
• 汇编语言(Assembly
Language)
将机器指令用助记符号代替而形成的一种语言 本质上是机器语言 mov eax,100 add eax,256 需要汇编程序“汇编”(翻译)
(2)实地址方式(Real-address Mode)
(3)系统管理方式(System Management Mode)
23
实现供节能和系统安全管理
第1章 汇编语言基础
3. 逻辑地址(Logical Address)
• 在处理器内部、程序员编程时采用的地址 • 逻辑地址=段基地址∶偏移地址
29
第1章 汇编语言基础
• 分页
线性地址空间
段1 段2
页目录
线性地址
页表 偏移量
物理地址空间
页
页表
页目录
段3
+
物理地址
入口
入口
页
30
第1章 汇编语言基础
存储器模型与工作模式
实模式
实地址模型
虚拟8086模式 保护模式 工作模式
31
分段模型
平展模型
段页模型 存储器模型
第1章 汇编语言基础
5. Win32的虚拟地址分配
• 80486集成浮点处理单元支持浮点指令 • Pentium系列
陆续增加若干整数指令、完善浮点指令 增加一系列多媒体指令(SIMD指令) IA-32(Intel Architecture-32)
5
第1章 汇编语言基础
1.1.3 Intel 64处理器
• 引入64位英特尔指令集结构
兼容32位指令系统 新增64位工作方式
• 可编程(Programmable)寄存器