第⼆章逻辑地址
逻辑地址=段基地址:偏移地址
有多个逻辑地址,但是只有⼀个物理地址。
编程使⽤
逻辑地址(相对地址:205)
处理器转换线性地址
地址总线输出
物理地址(绝对地址:15)
表⽰2楼05号房间和总的15号房间物理地址=段地址*16+偏移地址
段选择器16位寄存器
16位段寄存器段选择器
位段描述器段基地址
主存储器空间数据或指令
功能指令
硬指令助记符伪指令助记符处理器操作MOV
汇编命令BYTE在主存中占⽤若⼲的存储空间,⽤于保 存变量值,该变量以字节为单位存取功能说明显⽰字符串(以0结尾)功能说明
输⼊⼀个字符(回显)
参数(“位”表⽰⼆进制位)
出⼝:AL=字符的ASCII码
⼊⼝:EAX=缓冲区地址出⼝:AL=实际输⼊字符的个数(不含结尾字符),字符串以0结尾
⼊⼝:AL=字符的ASCII码
⼊⼝:EAX=字符串地址
备注
windows平台⼦程序
⼦程序名DISPMSG类别
⼊⼝参数EAX=字符串地址⼦程序名READC
READMSG
字符字符串输⼊输出
输⼊⼀个字符串(按回车键结束)
DISPCDISPMSGDISPCRLFREADBBREADBWREADBD
显⽰⼀个字符显⽰字符串(以0结尾)
光标到下⼀⾏⾸位置(回车换⾏)输⼊8位⼆进制数据输⼊16位⼆进制数据输⼊32位⼆进制数据显⽰8位⼆进制数据
出⼝:AL=8位数据出⼝:AX=16位数据
出⼝:EAX=32位数据
⼊⼝:AL=8位数据⼊⼝:AX=16位数
⼆进制输⼊输出
DISPBB
DISPBWDISPBDREADHB
显⽰16位⼆进制数据显⽰32位⼆进制数据
据
⼊⼝:EAX=32位数据
Processing math: 0%
输⼊2位⼗六进制数据出⼝:AL=8位数据
出⼝:AX=16位数
READHWREADHDDISPHBDISPHWDISPHDREADUIBREADUIWREADUIDDISPUIBDISPUIWDISPUID
输⼊4位⼗六进制数据输⼊8位⼗六进制数据
出⼝:AX=16位数据
出⼝:EAX=32位数据
⼗六进制输⼊输出
显⽰2位⼗六进制数据⼊⼝:AL=8位数据显⽰4位⼗六进制数据显⽰8位⼗六进制数据输⼊⽆符号⼗进制整数(≤255)输⼊⽆符号⼗进制整数(≤65535)输⼊⽆符号⼗进制整数(≤232-1)显⽰⽆符号⼗进制数据
显⽰⽆符号⼗进制数据
显⽰⽆符号⼗进制数据
输⼊有符号⼗进制整数(-32768~32767)
输⼊有符号⼗进制整数(-32768~32767)
输⼊有符号⼗进制整数(-231~231-1)
显⽰有符号⼗进制数据
显⽰有符号⼗进制数据
显⽰有符号⼗进制数据
⼊⼝:AX=16位数据
⼊⼝:EAX=32位数据
出⼝:AL=8位数据出⼝:AX=16位数据
出⼝:EAX=32位数据
⼊⼝:AL=8位数据⼊⼝:AX=16位数据
⼊⼝:EAX=32位数据
出⼝:AL=8位数据
⽆符号⼗进制输⼊输出
READSIB
READSIW
出⼝:AX=16位数据
出⼝:EAX=32位数据
⼊⼝:AL=8位数据⼊⼝:AX=16位数据
⼊⼝:EAX=32位数据
有符号⼗进制输⼊输出
READSID
DISPSIBDISPSIWDISPSIDDISPRB
寄存器显⽰
DISPRWDISPRDDISPRF
显⽰8个8位通⽤寄存器内容(⼗六进制)显⽰8个16位通⽤寄存器内容(⼗六进制)显⽰8个32位通⽤寄存器内容(⼗六进制)显⽰6个状态标志的状态
数据寻址⽅式
⽴即数寻址:数据与指令操作码⼀起,⽤常量表达MOV EAX,33221100H$属于⽴即数寻址低对低⾼对⾼
寄存器寻址:数据在寄存器中,⽤寄存器名表⽰MOV EBX,EAX
存储器寻址:数据在主存中,⽤存储器地址代表数据在DS指向的数据段
数据在SS指向的数据段(EBP、ESP为基地址)偏移地址
32位有效地址 = 基址寄存器+(变址寄存器×⽐例)+位移量寻址⽅式
寻址⽅式直接寻址寄存器间接寻址
特点
例⼦
MOV ECX,COUNT;count是变量MOV ECX,DS:[40500H];反汇编
有效地址存放在寄存器中(寄存器mov edx,[ebx]内容=偏移地址)mov [esi],ecx
寄存器相对寻址(相对:有效地址是寄存器内容与位移量含有位移量,可以为数字之和或者常量)
mov esi,[ebx+4] ;位移量:4
mov edi,[ebp-08h] ;位移量:-08Hmov esi,count[ebx] ;位移量:COUNT基址变址寻址,默认DSmov edi,[ebx+esi]
mov edi,[ebx][esi] ; 基址变址寻址,功能:EDI=DS:[EBX+ESI]相对基址变址寻址
mov eax,[ebx+edx+80h]mov eax,80h[ebx+edx]mov eax,80h[ebx][edx]
变址寻址
使⽤变址寄存器寻址操作数
变址寄存器:除ESP之外的任何32位通⽤寄存器之⼀
带⽐例的变址寻址
mov eax,[ebx*4] ; 带⽐例的变址寻址 moveax,[esi*2+80h] ; 带⽐例的相对变址寻址 mov
变址寄存器内容乘以⽐例1(可省
eax,[ebx+esi*4] ; 带⽐例的基址变址寻址 mov
略),2,4或8 的变址寻址
eax,[ebx+esi*8-80h] ; 带⽐例的相对基址变址寻址
数据寻址组合,主存储器不可调⽤⾃⼰第三章 数据处理整数符号
正数为0,负数为1
[105]_{补码}=01101001B
[-105]_{补码}=[01101001B]_{取反}+1 =10010110B+1=10010111B8位⼆进制补码的数值范围:-128~+12716位⼆进制补码的数值范围:-215~+215-132位⼆进制补码的数值范围:-231~+231-1N位⼆进制补码的数值范围:-2N-1~+2N-1-1负数补码
补码:11100000B
真值:-([11100000]求反+1)=-(00011111+1) =-00100000=-2^5=-32负数求补运算,等效于⽤带借位的0作减法真值:-8,补码:[-8]补码=00H-08H=F8H
补码:11111000,真值:-(00H-F8H)=-08H=-8借位为2 编码ASCII
回车CR换⾏LF响铃BEL数码0~9A~Za~z空格
0DH0AH07H30H~39H41H~5AH61H~7AH20H
变量
表⽰初值不确定
重复次数 DUP (重复参数)
类型名称⼤⼩表达
⽆符号整数0~255
补码表⽰的有符号整数:-128~+127⼀个字符(ASCII码值)压缩BCD码:0~99⾮压缩BCD码:0~9
分配⼀个或多个字单元;
每个数据是字量、16位数据字量表⽰16位⽆符号数或有符号数、16 位段选择器、16位偏移地址⼩端⽅式
低字节数据存放在低地址存储单元⾼字节数据存放在⾼地址存储单元
分配⼀个或多个双字单元;
每个数据是 双字量、32位数据 双字量表⽰32位⽆符号数或有符号数、 32位段基地址、32位偏移地址
BYTE(字节)8bit
WORD(字)16bit
DWORD(双
32bit
字)
QWORD(四字)
bit
存储⽅式
32位数据包含4个字节
以“⾼对⾼、低对低”原则占⽤4个连续字节空间
分配⼀个或多个8字节单元;8字节量表 ⽰位数据
⼩端存储变量定位
org 100h;从偏移地址100H处安排地址操作seg、offset$属于⽴即数寻址
变量类型 PTR\\TYPE\\LENGTHOF\\SIZEOF数据传送指令
名称作⽤注释
双操作数必须类型⼀致操作数必须有明确的类型
双操作数不允许都是存储单元(不能通过mov直接修改两个变量)操作专⽤寄存器的指令有限
MOV
XCHG
将源操作数和⽬的操作数
通⽤寄存器与通⽤寄存器之间
内容交换
通⽤寄存器或存储器之间
空操作指令NOP:XCHG
EAX,EAX
堆栈操作
SS指向堆栈段的起始位置ESP指定栈顶
PUSH:数据进⼊堆栈,ESP逐渐减⼩push srcESP=ESP-4SS:[ESP]=src
POP:数据依次弹出、ESP逐渐增⼤pop dest
dest=SS:[ESP]ESP=ESP+4
直接利⽤ebp进⾏堆栈的维护⼯作指令集
名称事例详情
⽬标代码换成表格内容⽬标代码存⼊EBX原表格内容存⼊alAL<—[EBX+AL]
LEA r16/r32,mem(不需要类型⼀致)LEA 在指令执⾏的时候计算出偏移地址OFFSET在汇编阶段计算出偏移地,更快lea esi,var
mov edi,offset vardest←dest+srcdest←dest+src+CF
数据传送类指令不影响CF标志位加1:reg/mem←reg/mem+1
dest←dest-src
寄存器与⽴即数、寄存器、存储单元的减法存储单元与⽴即数、寄存器的减法dest←dest-src-CFreg/mem←reg/mem-1不影响CF
reg/mem←0-reg/mem⽤零减去操作数
做减法运算:dest-src将⽬的操作数减去源操作数差值不回送⽬的操作数
按照减法结果影响状态标志
换码 xlat
地址传送指令 lea
加法指令ADD带进位加法指令ADC增量指令INC
ADD dest,srcADC dest,srcINC reg/mem
减法指令SUB带借位减法SBB减量指令DEC求补指令NEG
SUB dest,srcSBB dest,srcDEC reg/memNEG reg/mem
⽐较指令CMPCMP dest,src
⽆符号数乘法MUL
有符号乘法IMUL
4074H(=16500)=A5H(=165)×H(=100)MUL src
DC74H(=-9100)=A5H(=-91)×H(=100)IMUL src
IMUL dest,src(双操作数),存在dest内
IMUL dest,src,imm1 and 1=1,其他为00 or 0=0,其余为1NOT 0 = 1,NOT 1 = 0相同结果为0,不同及如果为1TEST dest,src ;作逻辑与运算:dest ^src
SHL reg/mem,i8/CLSHR reg/mem,i8/CLSAL reg/mem,i8/CLSAR reg/mem,i8/CL
AX=AL×r8/m8
DX.AX= AX×r16/m16EDX.EAX=EAX×r32/m32
双操作数存放在⼀个内,第⼀个为寄存器三个相乘,后两个乘积结果放在第⼀个内
逻辑与指令AND逻辑或指令OR逻辑⾮指令NOT亦或XOR测试指令TEST逻辑左移指令 SHL逻辑右移指令 SHR算术左移指令 SAL算术右移指令 SAR
设置CF=OF=0影响SF\\ZF\\PF同上
不影响状态标志位设置CF=OF=0影响SF\\ZF\\PF
按位进⾏逻辑与运算,不返回逻辑与结果逻辑左移:最低位补0,最⾼位进⼊CF逻辑右移:最⾼位补0,最低位进⼊CF算术左移,与SHL是同⼀条指令算术右移:最⾼位不变,最低位进⼊CFCF不算其中,但同左移数的值CF不算其中,但同右移数的值CF算其中,为左移数的值CF算其中,为右移数的值
不带进位循环左移指令 ROL 不带进位循环右移指令 ROR 带进位循环左移指令 RCL带进位循环右移指令 RCR
指令集事例标志传送指令状态标志
名称作⽤注释
8位数范围0~256
有进位,加上进位或借位后运算结果仍然正确。
8位数范围-128~+127
有溢出运算结果已经不正确。两个相同符号位相加、两个不同符号位相减,运算结果符号与原数据符号相反,产⽣溢出有符号数不包括进位,原有位数⼤⼩为0即可。最⾼位=符号位=SF最⾼位不包括进位
进位标志CF加减过程中最⾼位有进位或者借位,CF=1
溢出标志OF
有符号数加减结果有益处,OF=1
零标志ZF符号标志SF奇偶标志位PF
运算结果为0,ZF=1运算最⾼位为1,SF=1
低⼋位中1的个数为偶数或0时,PF=1
程序例题
⼤⼩写字母转换求补指令
win平台在dec运算的时会将CF算⼊
第四章 汇编语⾔程序设计分⽀程序结构汇编语⾔需求
⾸先利⽤⽐较CMP、测试TEST、加减运算、逻辑运算等影响状态标志的指令形成条件
然后利⽤条件转移指令判断由标志表达的条件,并根据标志状态控制程序转移到不同的程序段。程序代码在代码段
CS:指明代码段在主存中的段基地址EIP:给出将要执⾏指令的偏移地址指令集
名称实例JMP label
功能
⽆条件转移指令条件转移指令
JMP reg32/reg16
JMP mem48/mem32/mem16Jcc label
⽆条件转移:程序⽆条件改变执⾏顺序
条件满⾜,发⽣转移;否则,顺序执⾏下条指令
循环循环指令计数控制条件控制⼦程序结构call调⽤
Call label调⽤标号指定⼦程序
Call reg16/reg32调⽤寄存器指定地址的⼦程序
Call mem16/mem32/mem48调⽤存储单元指定地址的⼦程序ret返回
Ret ⽆参数:ESP=ESP+4Ret i16:ESP<-ESP+i16伪指令
⼦程序调⽤堆栈段
call先把下⼀条指令的偏移地址作为返回地址EIP存⼊堆栈,然后跳转到⼦程序参数传递程序
奇校验程序数据⽐较程序求绝对值
字母判断程序(⼤写转⼩写)题⽬
〔习题 1.10〕冯·诺依曼计算机的基本设计思想是什么?〔解答〕
采⽤⼆进制形式表⽰数据和指令。指令由操作码和地址码组成。
将程序和数据存放在存储器中,计算机在⼯作时从存储器取出指令加以执⾏,⾃动完成计算任务。这就是“存储程序”和“程序控制”(简称存储程序控制)的概念。
指令的执⾏是顺序的,即⼀般按照指令在存储器中存放的顺序执⾏,程序分⽀由转移指令实现。计算机由存储器、运算器、控制器、输⼊设备和输出设备五⼤基本部件组成,并规定了 5 部分的基本功能。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务