汇编语言程序

本文详细介绍了汇编语言中的指令系统,包括指令分类如数据传送、算数运算和逻辑运算等,以及伪指令和宏指令的使用,还涉及到段定义、程序流程控制和中断处理等内容,是理解计算机底层操作的重要参考资料。
摘要由CSDN通过智能技术生成

1.指令分类

指令,伪指令,宏指令

2.指令语句

(名称/空格/:)(操作助记符)(空格/操作数)(;注释)

3.常用符号和含义

OPR     operator    操作数
SRC     source      源操作数
DET     destination 目的操作数
REG     register    寄存器
REGn    register with n bits  n位寄存器
MEN     memory      存储单元
CNT     count       计数值
LABEL   label       过程或标签名
PORT8   ports with 8 bits   8位端口名
DISP8   display with 8 bits 偏移量为8位
EA      effective address   有效地址
IDATA   im data     立即数

4.地址标记方式

eg:
10var1[BX+5][SI+5] 表示的内容
(offset var1 +(BX)+(SI)+5+5+10)

5.指令分类

1.属性操作符
SEG  //取出段地址
OFFSET//取出有效地址
SIZE//变量的大小
LENGTH//取出重复的次数
TYPE//取出类型
2.定义变量
变量名 操作符 表达式
db,dw,dd,dq,qt
3.数据传送类
  1. 通用传送地址 MOV DET SOC //(DST)<-(SOC) 注意:

  • 不能直达的路径:存储单元->存储单元,立即数->段寄存器,段寄存器->段寄存器

  • 类型匹配:两者类型指定,则必须一致,单个类型,一般认为无措,0个类型,报错

  1. 取有效地址指令

LEA REG16 MEN//(REG16)<-(MEN的偏移地址)

  1. LDS,LES

LDS REG16 MEN;//(DS)<-(MEN+2),(REG16)<-(MEN)

LES REG16 MEN;//(ES)<-(MEN+2),(REG16)<-(MEN)

不允许为段寄存器

  1. 标记传送指令

    LAHF ;//(AH)<-PSW低8位

    SAHF;//PSW低8位<-(AH)

  2. 数据交换指令

    XCHG DST SEG;//(DST)<->(SEG)

  3. 字节转换指令

    XLAT;//(AL)<-((AL)+(BX))

  4. 堆栈操作指令

    PUSH DES

    POP DES

    PUSHF;//push psw to stack

    POPF

4.算数运算类
ADD DST,SRC;    //(DST)<--(SRC)+(DST)
ADC DST,SRC;    //(DST)<--(SRC)+(DST)+(CF)
AAA;            //ASCII adjust for addtion
DAA             //decimal adjust for addtion
//ADD和ADC都能影响标志位,但ADD只是将src和dst相加,ADC则会将src,dst,cf相加
​
SUB DST,SRC;    //(DST)<--(SRC)-(DST)
SBB DST,SRC;    //(DST)<--(SRC)-(DST)-(CF)
AAB;                
DAB;
​
NEG DST;        //(DST)<--0-(DST)
CMP DST,SRC;    //(DST)-(SEC),并设置psw位
​
INC DST;
DEC DST;
//自增1,自减一
​
MUL SRC;
IMUL SRC;
AAM;
//只影响AF和CF
​
DIV SRC;
IDIV SRC;
AAD;
//不影响psw
5.逻辑运算类
AND DST,SRC;        //(DST)<—-(SRC)^(DST),并设置标志位
TEST DST,SRC;       //(SRC)^(DST),并设置标志位
OR DST,SRC;         //或操作,并设置标志位
XOR DST,SRC;        //异或操作,并设置标志位
NOT DST;            //取非操作,但不设置标志位·
6.移位类指令
逻辑移位:对无符号数进行的,左移右移都补0
算数移位:对有符号数进行的,符号位不变,对数值位进行移动
CF为取出的那一位
MSB 为DST为高位
LSB 为DST低位
​
//逻辑移位
SHR DST,CNT;    //0——>[MSB—->LSB]—>CF;
SHL DST,CNT;    //CF<—-[MSB<—-LSB]<—-0;
​
//算数移位
SAL DST,CNT;
SAR DST,CNT;    
​
//循环移位
ROR DST,CNT;
ROL DST,CNT;
​
//带位循环移位
RCL DST,CNT;
RCR DST,CNT;
​

7.标志位操作指令
//对psw进行CF,DF,IF进行置位,清零或取反操作
​
//clear 置0
CLC
CLD
CLI
​
//set 置1
STC;
STD;
STI;
​
//complement 取反
CMC;
8.转移指令
//无条件指令     段间转移
JMP LABAL;
JMP REG16;
JMP MEN;
​
​
//有条件指令 段内转移
对CF,ZF,SF,OF,PF进行状态判定
JC LABLE;
JNC LABLE;
9.循环指令
LOOP LABAL; //(CX)<—-(CX-1),if (CX)!=0,jump label;
LOOPZ/LOOPE LABAL;//(CX)<—-(CX-1),if (CX)!=0 and ZF=1,jump label;
LOOPNZ/LOOPNE LABAL;
JCXZ LABEL;//if CX=0,JUMP LABEL;
10.程序
//子程序调用指令
CALL LABEL;
CALL OPR;
​
//子程序返回指令
RET;
RETF;
RET n;
​
​
//过程定义
procedurename PROC [NEAR/FAR]//NEAR 段内调用,FAR 段间调用
              ………
              RET
procedurename ENDP
​
​
//中断调用指令
INT n;
​
//中断返回指令
IRET;
​
//中断程序
<name> :
    PUSH AX //protect scene
    ….
    PUSH SI
    … //body of produre
    POP SI //restore scene
    …
    POP AX
    IRET
11.string
//move string
MOVSB;
MOVSW;
MOVS DST,SRC;
​
​
//repeat profix
REP ;//similar to loop
REPZ/REPE;
REPNZ/REPNE;
eg:
REP MOVSW;
​
//CMP
CMPSW;
CMPSB;
CMP DST,SRC;
//比较结果不保存,但设置psw标志位
​
//scan
SCASB;//将目的操作数与AX(AL)进行比较
SCASW;
SCAS DST,SRC;
​
​
//LOAD
LODSB
LODSW
LODS DST,SRC
​
​
//store
STOSB
STOSW
STOS DST,SRC
12.other
IN DST,SRC;
OUT DST,SRC;
NOP;//什么都不做,占用3个时钟周期
HLT;//进入暂停状态
WAIT;//
LOCK;
ESC CODE,DATA;//CODE为指令码,data是送给其他处理器的数据
13.宏指令
定义:
name MACAO paraments
    ...
    ENDM
调用
name paraments
14.重复宏

REPT,IRP,IPRC

​
REPT    expression
...
ENDM;
​
​
IRP 形参 <具体paraments》
...
ENDM;
​
IRPC 形参,string
...
ENDM;

6.伪指令

1.段定义
name SEGMENT PAGE/PARA/WORD/BYTE 组合类型 类别
...
name ENDS
2.ASSUME

告诉编译程序各个段寄存器存放的是哪一个段的地址

但不意味着已经存放

ASSUME 段寄存器1:名称1,段寄存器2:名称2
3.END
END 表达式;//表达式的值通常是该程序的启动地址
4.PAGE
PAGE para1,para2;
5.LABEL
name LABLE type;
6.TITLE
TITLE 正文
7.EQU

给表达式一个名称

name EQU expression;
8.ORG
ORG expression

7.汇编程序设计

用户设计的程序常包含3个段:堆栈段,数据段,代码段

汇编源程序会生成3个文件:obj,lst,crf

obj是指令伪指令编译后目标代码文件

lst是列出程序代码,编译地址以及出错信息

crf是标识符标号的引用情况

链接源程序会生成exe和map

exe是可执行文件

map是内存分配文件

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值