汇编语言学习笔记1
来源:互联网 发布:mac如何卸载迅雷插件 编辑:程序博客网 时间:2024/06/06 04:02
定义数组ARR ARR DW 1,2,3,4,5,6,7
ARREND 计算数组长度 ARREND DW ?
MOV CX,(ARREND-ARR)/2
关系运算符 表达式1 关系运算符 表达式2
EQU 定义符号 VAL EQU 5H定义符号常量VALUE为5H
EQ 等于 MOV BX,32 EQ 45
NE 不等
GT 大于
LT 小于
LE 小于等于
GE 大于等于
数值返回运算符
SEG 取段地址 SEG 变量名/标号
OFFSET 取偏移地址 OFFSET 变量名/标号
TYPE 取类型值 TYPE 变量名/标号/常数
对于变量,汇编语言将会送以字节数表示的类型:DB为1,DW为2,DD为4。对于标号,汇编程序将回送代表标号类型的数值:NEAR为-1,FAR为-2。对于常数,则回送0。
LENGTH 取长度
SIZE 取总字节数 SIZE=LENGTH*TYPE
属性运算符
PTR 属性修改运算符 类型 PTR 表达式
: 段寄存器:地址表达式
SHORT 短取代运算符 用来修饰JMP指令中转向地址是在下一条指令地址的-128~127字节范围内
JMP SHORT NEXT
.
.
NEXT:MOV AX,BX
模块命名和标题伪指令
NAME 模块名 模块命名伪指令
TITLE TEXT 标题伪指令
END [标号]
NAME [模块名]
.
.
END [启动标号或过程]
-----------------------------------------------------------------------------------------------
DUP初始化 S DB 30 DUP(0)定义30字节数组,所有数字初始化为0
ARRAY1 DB 2 DUP(0,1,2,?) ;得到”0,1,2,-,0,1,2,-“, 2是重复次数
ARRAY2 DB 100 DUP(?)
完整段定义伪指令
段名 SEGMENT [定位类型] [组合类型] [‘类别名’]
.
.
段名 ENDS
指定段寄存器伪指令
ASSUME CS:CODE,ES:EXTRA,DS:DATA,SS:STACK
MOV AX,4C00H;
INT 21H
MAIN PROC FAR
PUSH DS
MOV AX,0H
PUSH AX
.
.
RET
MAIN ENDP
EQU相当于C语言中的define
PURGE解除定义的伪指令
Y1=7
Y1=128
正确
Y2 EQU 7
Y2 EQU 128
错误
Y2 EQU 7
PURGE Y2
Y2 EQU 128
正确
$地址计数器 “$”直接表示地址计数器的值
ORG 常数表达式:使其后的指令或数据从表达式的值所指定的偏移地址开始存放
LABEL:符号名 LABEL 类型
JMP 无条件跳转指令
PUSH 进栈指令
(SP)<-(SP)-2
((SP+1),(SP))<-(SRC)
POP 出栈指令
(DST)<-((SP+1),(SP))
(SP)<-(SP)+2
XCHG 交换指令 该指令的两个操作数必须有一个在寄存器中
IN 输入指令 IN AL,5 (5是端口号,从端口5输入一个字节到AL中)
如果是通过指令中的一个字节直接指明端口地址,则它只能寻址256个端口,如果通过DX的内容间接指明端口地址,则可以间接寻址65536个端口。若端口地址>=256时,则需要在IN指令之前必须预先将DX中装入所需要的端口地址。目的操作数只能是AL或AX)
OUTPUT :输出指令 OUT 5,AL (从AL中提取内容输出到端口5)
当端口号>=256时,必须先将端口号送入DX,再执行OUT指令)
LEA REG,SRC:有效地址送寄存器 REG表示寄存器,源操作数只能是存储器寻址方式,目的操作数必须是一个161位通用寄存器,但不能使用段寄存器。
LEA BX,TABLE
LEA BX,[SI+OF62H]
LDS REG,SRC:指针送寄存器和DS指令
LES REG,SRC:指针送寄存器和ES指令
CBW:字节转换为字指令。将AL中的内容进行符号扩展到AH,形成AX中的字,若AL的最高有效位为0,则AH为0;若AL的最高有效位为1,则(AH)=0FFH。AL不变。
CWD:字转换双字节。将AX中的内容进行符号扩展到DX,形成DX:AX中的双字,即如果AX的最高有效位为0,则DX为0;若AX的最高有效位为1,则(DX)=0FFFFH。AL不变。
ADC DST,SRC: (DST)<-(SRC)+(DST)+CF 带进位加法指令,CF指上步运算的进位
INC OPR:(OPR)<-(OPR)+1 加1指令
SBB DST,SRC:(DST)<-(DST)-(SRC)-CF 带借位减法
DEC OPR:减1指令,不影响CF标志位
NEG OPR:求补指令
CMP OPR1,OPR2:比较指令,用(OPR1)-(OPR2)的结果来设置标志位。该指令与SUB一样执行减法操作,但它并不保存结果,只是根据结果设置条件标志位。该指令后往往跟着一条条件转移指令,根据比较结果产生不同的程序分支。
MUL SRC:无符号数乘法
(AX)<-(AL)*(SRC) SRC为字节操作数
(DX,AX)<-(AX)*(SRC) SRC为字操作数
IMUL SRC:带符号数乘法
DIV SRC:无符号数除法
(AL)<-(AX)/(SRC)的商
(AH)<-(AX)/(SRC)的余数
IDIV SRC:带符号数除法
(AX)<-(DX,AX)/(SRC)的商
(DX)<-(DX,AX)/(SRC)的余数
逻辑运算符
AND 逻辑与
OR 逻辑或
XOR 异或
NOT 逻辑非
TEST OPR1,OPR2:测试。由(OPR1)^(OPR2)的结果来设置标志位,不影响两操作数的值,不保存结果数。该指令可以测试目的操作数的某些位是否为0或1,源操作数应将需测试的位设为1,其余为0。
测试一个数的最高位是否为1:MOV AL,90H
TEST AL,80H
移位运算符
SHL/SHR OPR,CNT 逻辑左移/右移
低位/高位补0,CF的内容为OPR最后移出的数位值。
SAL OPR,CNT:算数左移
与SHL相同
SAR OPR,CNT:算术右移
最高位保持不变,即符号位保持不变
ROL/ROR OPR,CNT:循环左移/右移
RCL/RCR OPR,CNT:带进位循环左移/右移
将OPR连同CF标志一起连接起来,形成一个环,将环中的所有有向位向左循环移动CNT指定的次数,CF最后的内容为OPR最后移到CF中的数位值。
重复前缀
1. REP 串指令
(CX)=0则退出串操作,否则往下执行
(CX)<-(CX)-1
执行其后串操作
重复前面步骤
2. REPE/REPZ 串指令(REPE与REPZ完全相同)
(CX)=0或ZF=0(即某次比较结果两个操作数不等)则退出串操作,否则往下执行
(CX)<-(CX)-1
执行其后串操作
重复前面步骤
3. REPNE/REPNZ 串指令
(CX)=0或ZF=1则退出串操作,否则往下执行(只要比较两数不相等并且ZF=1,就可以继续执行)
(CX)<-(CX)-1
执行其后串操作
重复前面步骤
串处理指令
可以使用单条指令,也可以加重复前缀。CX为16位寄存器,所以最大数据段长度为64KB
源串地址应设置在DS:SI,但可以指定段跨越前缀
目的串地址应设置在ES:DI,不能指定段跨越前缀
- 汇编语言学习笔记(1)
- 汇编语言学习笔记1
- 汇编语言学习笔记(1)
- 汇编语言学习笔记(1)
- win32汇编语言学习笔记1
- 汇编语言学习笔记:寄存器(1)
- 汇编语言入门学习笔记1
- 《80x86汇编语言程序设计》学习笔记(1)
- 王爽《汇编语言》学习笔记----实验1
- 王爽-《汇编语言2》学习笔记1
- 汇编语言学习笔记1(王爽)
- 汇编语言学习笔记(一)
- 汇编语言学习笔记(二)
- 汇编语言学习笔记(三)
- 汇编语言学习笔记(四)
- 汇编语言学习笔记(五)
- 汇编语言学习笔记(六)
- 汇编语言学习笔记(七)
- 【Thinking in Java】多态
- 关于android推送
- 排序算法之冒泡排序
- 最大流算法之Ford-Fulkerson
- mdns 协议小记
- 汇编语言学习笔记1
- Chapter 6 生产者消费者之Condition实现
- oracle安装报错 windows找不到文件‘http:/127.0.0.1:%HTTPPORT%/apex/f?p=4950’.请确定文件名是否正确后,再试一次
- sed命令详解
- Paintball(dfs判断连通)
- Android中dip、dp、sp、pt和px的区别
- iOS UI 第三课 父子视图
- Chapter 7 生产者消费者之ArrayBlockingQueue实现
- cf 417 C Football