汇编语言复习笔记




1、汇编语言是一种符号化了的机器语言,即用指令助记符、符号地址、标号等符号书写程序的语言。


2、数据总线宽度指芯片内数据传送的宽度,外部数据总线宽度为芯片内和芯片外交换数据的宽度,地址总线宽度专用于传送地址的总线宽度


3、数据寄存器:AX(累加器),BX(基址),CX(移位保存计数值),DX(IO端口地址) 
指针寄存器:SP(堆栈指针寄存器),BP(基址指针寄存器)
变址寄存器:SI(源变址寄存器),DI(目的变址寄存器)(以上均为通用)
控制寄存器:IP,FLAGS 段寄存器:CS,SS,DS,ES 程序可见寄存器可以分为通用寄存器,控制寄存器和段寄存器三类
注:除SP,ESP堆栈指针不能随意修改,其他通用都可以直接在指令中使用


4、运算结果标志位
CF 进位标志 溢出CF=1  
PF 奇偶标志 
AF 辅助进位标志
ZF 零标志 结果为0其为1
SF 符号标志 负为1
OF 溢出标志 溢出为1


5、控制标志
IF 中断允许标志 为1响应中断
DF 方向标志 
TF 陷阱标志 为1处于单步调试,为0连续调试
IOPL 特权标志
ID 标识标志 


6、段寄存器
CS 指定当前代码段
SS 指定当前堆栈
DS 指定当前运行程序所使用的数据段
ES 附加数据段
程序执行时,其当前段的段基址放在相应的段寄存器中,偏移量视访问内存的操作类型决定,可能放在寄存器中或通过操作数寻址方式得到


7、寻址方式
立即寻址 MOV AL,6 (AL)=6
寄存器寻址方式 MOV BX,AX (BX)=(AX)
有效地址由四种成分组成:
位移量 基址  变址  比例因子(变址寄存器的内容乘以比例因子来取得变址值)
直接寻址方式 MOV AL,[78H] 若DS=3000H (30078H)=12H (AL)=12H
寄存器间接寻址 MOV AL,[BX] (DS)=3000H (BX)=78H (30078H)=12H (AL)=12H
寄存器相对寻址 MOV AL,8[BX] (DS)=3000H (BX)=70H (30078H)=12H (AL)=12H
基址变址寻址 MOV AL,[BX][SI] 
相对基址变址寻址 MOV AL,MASK[BX][SI]  MOV AL,[MASK+BX+SI]


8、转移指令
JMP 目标 
段内转移只影响指令指针IP值,段间转移既要影响IP值,也要影响代码段寄存器CS的值
段间直接寻址方式 JMP FAR PTR LAB指令中直接给出转向4字节的偏移量和段基址
段间间接寻址方式 JMP DWORD PTR [BX] 表示BX指向一个双字变量


9、通用数据传送指令
MOV传送指令
格式 MOV DST,SRC  SRC->DST
MOV指令可以实现一个字节,一个字,一个双字的数据传送
注意点:
立即数不能作为目标操作数,立即数不能直接送段寄存器,目标寄存器不能是CS,两个段寄存器间不能直接传送,两个存储单元间不能直接传送
堆栈操作指令
PUSH SRC 先修改堆栈指针使其指向新的栈顶,然后把SRC压入栈顶单元
POP DST 先把堆栈指针所指向单元的内容弹出到DST,然后修改堆栈指针以指向新的栈顶
交换指令 XCHG
XCHG OPR1,OPR2 交换两个操作数 寄存器-寄存器  寄存器-存储器 存储器-寄存器


10、输入输出指令
输入指令IN IN ACR,PORT 
输出指令OUT OUT PORT,ACR


11、查表转换指令XLAT
通过AL寄存器中的索引值在表中查得表项内容并将之返回到AL中


12、地址传送指令
传送有效地址指令LEA
LEA REG,SRC 把源操作数的有效地址送给指定的寄存器,源操作数必须是存储器操作数


13、加载数据段指针指令LDS
LDS REG,SRC 把源操作数中的FAR型指针拷贝到DS和指令中指定的通用寄存器
加载附加数据段指针指令LES
LES REG,SRC 目的寄存器不允许使用段寄存器
加载FS数据段指针指令LFS
LFS REG,SRC 
加载GS数据段指针指令LGS
LGS REG,SRC
加载堆栈段指针指令LSS
LSS REG,SRC


14、标志传送指令
标志进栈指令 PUSHF/PUSHFD
标志出栈指令 POPF/POPFD
标志送AH指令 LAHF
AH送标志寄存器指令 SAHF


15、类型转换指令
字节扩展成字指令CBW  把AL寄存器中的符号位扩展到AH中
字扩展成双字指令 CWD 把AX寄存器中的符号位扩展到DX中
双字扩展成四字指令CDQ 把EAX寄存器中的符号位扩展到EDX中
AX符号位扩展到EAX指令CWDE 把AX寄存器中的符号位值扩展到EAX的高16位


16、二进制加法指令
加法指令 ADD ADD DST,SRC (DST)+(SRC)->DST
带进位加法指令ADC ADC DST,SRC (DST)+(SRC)+CF->DST
加1指令INC INC DST (DST)+1->DST
交换并相加指令XADD XADD DST,SRC (DST)+(SRC)->TEMP (DST)->SRC TEMP->DST


17、条件标志位
对于两个二进制数进行加法运算,无符号数相加结果若使CF置1,则表示溢出,带符号数相加结果若使OF置1,则表示溢出。
CF位是根据最高有效位是否有向高位的进位设置的,OF位则是根据操作数的符号及其变化情况来设置


18、二进制减法指令
减法指令SUB DST,SRC (DST)-(SRC)->DST
带借位减法指令SBB DST,SRC (DST)-(SRC)-CF->DST
减1指令DEC DST  (DST)-1->DST
比较指令CMP DST,SRC (DST)-(SRC) 影响标志位
求补指令NEG DST 0-(DST)->DST  用来求一个数相反数


19、二进制乘法指令
无符号乘法指令MUL SRC  (AX)<-(AL)*(SRC) (DX,AX)<-(AX)*(SRC)
这个源操作数只能是寄存器或存储器操作数,不能是立即数,另一个乘数必须事先放在累加器中
带符号乘法指令IMUL SRC
除了是实现两个带符号数相乘外,其他与MUL指令相同


20、二进制除法指令
无符号除法指令DIV SRC 操作数作为除数使用,被除数必须事先存放在隐含的寄存器中
带符号除法指令IDIV SRC 商和余数均为带符号数,余数符号与被除数相同,若除数为0或商超出操作数所表示的范围会产生除法错中断,此时系统直接进入0号中断处理程序


21、逻辑指令
逻辑指令提供了对二进制位的控制
逻辑非指令可用于把操作数的每一位均变反的场合
逻辑与指令用于把某位清0的场合
逻辑测试指令可用于只测试其值而不改变操作数的场合
逻辑或指令用于把某位置1的场合
逻辑异或指令用于把某位变反的场合


22、位扫描指令
顺向扫描指令BSF DST,SRC 从右向左扫描操作数中第一个含1的位,并把扫描到的第一个含1的位号送DST操作数


23、基本移位指令
SHL 逻辑左移 SAL 算术左移
SHR 逻辑右移(补0) SAR 算术右移(左侧符号不变)
移位指令常常用来作乘以2或除以2的操作,其中算术移位指令适用于带符号数操作,逻辑移位指令用于无符号数运算,使用这种方法比直接用乘除法效率要高


24、循环移位指令
ROL 循环左移 ROR 循环右移
RCL 带进位循环左移 RCR 带进位循环右移


25、程序控制指令
无条件转移指令JMP DST DST为转移的目标地址
段内转移:这类转移指令只改变IP值,不改变CS值
-段内直接短转移 JMP SHORT LABEL 无条件转移到标号处(标号地址与IP值差+127--128字节)
-段内直接近转移 JMP NEAR PTR LABEL无条件转移到标号处,可以转移到段内的任一个位置
-段内间接转移 JMP REG/M 转向地址在通用寄存器或内存单元中
段间转移:这类转移指令既改变IP值,也改变CS值
-段间直接转移 JMP FAR PTR LABEL 无条件转移到标号处,标号与JMP指令分别处在不同段中
-段间间接转移 JMP DWORD PTR M 无条件段间转移,转向地址只能放在内存的双字变量中


条件转移指令
Jcc LABEL 如果条件为真,转向标号处,否则顺序执行下一条指令
检测单个标志位实现转移的条件转移指令 JE JNE 相等,不等
根据两个带符号数比较结果实现转移的条件转移指令 JG JNLE 大于/不小于等于
根据两个无符号数比较结果实现转移的条件转移指令 JA JNBE 高于/不低于等于


26、循环指令
循环指令LOOP LABEL (CX)-1->CX 若(CX)≠0,则转向标号处执行循环体
相等循环指令LOOPE/LOOPZ LABEL (CX)-1->CX 若(CX)≠0且ZF=1,则转向标号处执行循环体
不等循环指令LOOPNE/LOOPNZ LABEL (CX)-1->CX 若(CX)≠0且ZF=1,则转向标号处执行循环体


27、程序调用
子程序调用指令CALL DST 调用子程序,执行时先把返回地址压入堆栈,再形成子程序入口地址
段内调用
-段内直接调用CALL PROCEDURE 调用PROCEDURE子程序
-段内间接调用CALL REG/M 
执行时先把返回地址压入堆栈,再把指令指定的16位通用寄存器或内存单元的内容送给IP


段间调用
-段间直接调用 CALL FAR PTR PROCEDURE 
执行是先把返回地址压入堆栈,再把指令中的偏移量部分送给IP,段基址部分送给CS
-段间间接调用 CALL M
执行时把M的低字送给IP,高字送给CS


子程序返回指令RET 从栈顶弹出返回地址,然后返回到主程序继续执行
带立即数的返回指令RET imm16 最后修改栈顶指针SP=(SP)+imm16


28、中断
中断类型:内部中断(软),外部中断(硬)
中断向量:中断处理子程序的入口地址
中断类型号:IBM相应编号为0-255
中断向量表:中断向量按照中断类型号由小到大的顺序排列
中断调用指令INT n n为中断类型号
中断返回指令IRET


29、串操作指令
MOVSB 字节传送
MOVSW 字传送
MOVSD 双字传送
串传送指令MOVS DST,SRC
取串指令LODS SRC
存串指令STOS DST
串输入指令INS DST,DX
串输出指令OUTS DX,SRC
串比较指令CMPS DST,SRC
串扫描指令SCAS DST




30、汇编语句格式
指令:每一条指令语句都要生成机器代码,各对应一种CPU操作
伪指令:语句由汇编程序在汇编过程中执行,除了数据定义分配存储空间外,其它伪指令不生成目标码
宏指令:由用户按照宏定义格式编写的一段程序,其中可以包含指令,伪指令,甚至另一条宏指令。
[名字]助记符<操作数>[;注释] []可选
名字:名字域是语句中的符号地址,指令的名字叫做标号,名字具有三属性,段基址,偏移量和类型
助记符:给出操作的符号表示
操作数:为操作提供必要的信息,每条指令语句的操作数个数已由系统确定
注释:以说明本条语句在程序中的功能


段定义伪指令 SEGMENT...ENDS
ASSUME伪指令 ASSUME 段寄存器名:段名[,......] 说明段寄存器和段之间的关系,该语句并不给段寄存器赋值,通常放在代码段或主过程的第一个语句位置
过程定义伪指令 PROC[类型]...ENDP 定义一个过程,NEAR 类型表明该过程只能在段内被调用,FAR类型表明该过程既可以在段间被调用,也可以在段内被调用
程序结束伪指令 END [过程名] 表示源程序结束
INT 20H指令功能:退出应用程序,释放所占内存并返回DOS


31、com文件
.com文件是一种可执行程序,它的总长度不能超过64k,整个文件只能由一个段组成,适合编制较小的程序。.com程序的代码,数据及堆栈数据在同一段中
ORG伪指令: ORG 数值表达式,设置地址计数器内容为数值表达式的值


32、常用伪指令
数据定义伪指令 [变量名] 助记符 操作数  为变量分配单元,并为其初始化或只预留空间。
操作数有:数字常量及数值表达式,字符串常量,地址表达式,?,<n>DUP(操作数,......)[对某些数据重复多次]
LABEL伪指令:名字 LABEL 类型 为下一个存储单元起一个名字,定义它的类型
符号定义伪指令:EQU伪指令 等号伪指令【符号名=数值表达式】,EVEN对准伪指令


33、结构伪指令
结构定义伪指令 结构名 STRUC ...结构名 ENDS
结构预置语句 结构变量名 结构名 <字段值表> 为结构变量分配存储空间及初始化


34、汇编语言操作符
算术操作符: + - * /  MOD
逻辑操作符: AND OR XOR NOT,逻辑操作符按位操作
关系操作符: EQ NE LT LE GT GE
返回值操作符:
属性操作符: PTR操作符 指定地址表达式的类型 THIS 操作符 为存储器操作数指定类型
SHORT 操作符 HIGH、LOW操作符 -字节分离操作符


35、汇编程序上机过程
通过建立,汇编,连接,运行过程
建立:文件名的扩展名部分必须为.ASM
汇编:汇编语言源程序经过汇编,才可以生成目标程序
连接:连接分别产生的目标模块,解决外部交叉调用,产生一个可重定位的装入模块、以及产生可选的内存映像文件
运行:生成.EXE文件后,就可以键入该文件名运行
调试:静态差错即检查源程序,并在源程序级用文本编辑器进行修改,然后再汇编、连接、运行。


36、使用ROM BIOS中断调用
键盘中断调用16H:每个功能对应一个功能号
功能号->AH
INT 16H
显示器中断调用10H


37、程序流程设计
循环程序设计包括:循环初始化、循环体、循环控制部分


38、子程序设计
调用程序和子程序在同一个代码段的程序结构:子程序可以是NEAR型或缺省,段长不超过64K
调用程序和子程序在不同段的程序结构:子程序是FAR属性,CALL指令要显式说明是FAR属性
子程序参数传递:通过寄存器传递,通过变量传递,通过地址表传递参数地址,通过堆栈传递参数或参数地址


39、宏指令
宏指令是源程序中一段有独立功能的程序代码,宏指令由宏定义伪指令定义,只需在源程序中定义一次。
宏调用格式 宏指令名[实参数表] 实参数之间用逗号隔开
宏扩展:用宏定义体替换宏指令名,并用实参数替换形式参数
LOACL伪指令:LOCAL 局部符号表,对局部符号表中的每个符号在汇编时每扩展一次便建立一个惟一的符号
宏指令嵌套:有两种情况(1)宏定义体中含有宏调用 (2)宏定义体中含有宏定义
重复伪指令:REPT 重复次数由表达式给出
不定重复伪指令:IRP伪指令,重复次数由实参数个数决定 IRPC伪指令,重复次数由字符串中的字符个数确定


40、中断
中断源:引起中断的事件称为中断源
中断分类:内中断-INT n指令,除法错中断,溢出中断,单步中断,断点中断
外中断-可屏蔽中断(INTR):该外设的中断请求是否屏蔽,CPU是否允许响应中断
IF=0,CPU禁止响应任何外设中断 IF=1 允许CPU响应外设中断请求,在中断处理完成后,必须把中断结束位置1,结束硬件中断用下面指令
MOV AL,20H 
OUT 20H,AL
-不可屏蔽中断


中断优先级:相对优先级可以通过设置中断命令寄存器的某些位实现,固定优先级是反映中断源的重要性和工作速度有明显等级差别
中断嵌套:正在运行的中断处理程序又被其他中断源中断,要求堆栈的空间足够大
中断处理子程序设计步骤
-保存有关寄存器内容
-若允许中断嵌套则开中断
-处理中断
-关中断
-发送中断结束命令给中断命令寄存器
-恢复寄存器内容
-返回被中断的程序


主程序的准备工作
-保存原中断向量
-设置新中断向量
-清零中断屏蔽寄存器的相应位
-设置CPU中断允许位
-在主程序结束之前,恢复原中断向量


可编程中断控制器8259A内部结构
中断请求寄存器IRR
中断屏蔽寄存器IMR
中断服务寄存器ISR
优先权判决电路
控制逻辑
数据总线缓冲器
读/写控制电路
级联缓冲器/比较器
工作方式:
-优先级管理方式:全嵌套方式、特殊全嵌套方式、优先级自动循环方式、优先级特殊循环方式
-中断源的屏蔽方式:普通屏蔽方式、特殊屏蔽方式
-中断结束方式:中断自动结束方式、普通中断结束方式、特殊中断结束方式
-连接系统总线的方式:非缓冲方式、缓冲方式
-中断触发方式:边沿触发方式、电平触发方式


41、模块连接
-对各模块分别处理以保证其功能的正确性
-构造主模块
-构造子模块
-对所有模块分别汇编,生成各自的.obj文件
-连接与本系统相关的所有.obj文件
-调试及运行程序

 





2011年汇编面试题目汇总

 

 


选择,问你下列哪个是正确的【C】
①REP      LODSB
②REP      SCASB
③REP      CMPSB
④REP      MOVSB
MOV AL 6[BX]的立即数寻址方式是什么?
【寄存器相对寻址方式】
考查汇编语言,将初始的AL=90H,写条语句将AL置为00H
【XOR AL,AL】
中断服务子程序包括哪些组成部分?
【关中断、保护现场、中断服务、开中断、恢复现场、中断返回】
模块设计的具体步骤?
【先按模块独立汇编,然后再与应用的其他模块(有可能是汇编程序模块,也有可能是C程序模块)链接形成一个可执行的程序】
MOV AL [BX] ,源操作数的寻址方式?
【寄存器间接寻址】
什么是汇编语言?汇编语言的源程序是什么?
【面向机器的程序设计语言,用指令助记符,符号地址标号等符号书写程序的语言;源程序就是汇编语言程序用汇编语言编写的一种计算机程序】
汇编中指令指针时哪一个?(A.ip  B.sp  C.bp.  D.psw )
【A】
汇编语言有什么特点?
【占用空间少,执行速度快,直接控制硬件能力强,不容易掌握,开发周期长,可移植性差】
jmp bx的寻址方式是什么?
【段内间接寻址方式】
汇编中END的含义?
【该伪指令表示源程序的结束.令汇编程序停止汇编。因此,任何一个完整的源程序均应有END指令】



你可能感兴趣的:(汇编语言复习笔记)