汇编语言基础知识

模板

data segment
  [数据段]
data ends

code segment
  assume cs:code, ds:data, es:data
start:
  [代码段]
exit: mov ah,4cH
  int 21H
code ends
end start

数据段

NumOut db 0dh, 0ah,"The number of Num is : $"
  NumOut:变量名
  db:定义
  0AH:换行符的ASCII码
  0DH:回车符的ASCII码(确认)
  “The number of Num is : $”:变量的内容,通常以 $ 作为结尾。地址追踪器

count equ $ -source
   count=$ -offset source
  count为source的长度

db/dw
db
  定义字节类型变量,一个字节数据占1个字节,读完偏移量+1
dw
  定义字类型变量,一个字数据占2个字节单元,读完偏移量+2
  双字节顺序存放,且要分开编辑。按低到低字节、高到高位字节对应
  eg.定义1234,内存为34 12(低→高)

dst db 20 dup(?)
   为dst分配20个字节单元,内容未知

dup():
   重复定义圆括号中指定的初值,次数由前面的数值决定
?:
   只分配存储空间,不指定初值

buf db 100
   db ?
   db 100 dup (0)

定义缓存空间,大小为100个字节,实际大小未知,内容暂时全为0。字符串的首地址为$buf+2

代码段

寄存器
段寄存器:
   cs:段寄存器 存代码(code的段基址)
   ds:数据寄存器 存数据(data)
   es:附加段寄存器 存data (?)
   ss:堆栈寄存器
通用寄存器:
   AX 累加寄存器
    AX=AH(高8位)+AL(低8位)
   BX 基址寄存器
    BX=BH(高8位)+BL(低8位)
   CX 计数寄存器
    CX=CH(高8位)+CL(低8位)
   DX 数据寄存器
    DX=DH(高8位)+DL(低8位)

INT 21H
   21号中断
  使用: MOV AH,op
        INT 21H
  op:
    01H —键盘输入并回显 过滤掉控制字符
          AL=输入字符
    02H —字符输出
    03H —辅助设备的输入
    04H —辅助设备的输出
    05H —打印输出
    06H —控制台输入/输出
          AL=输入字符
    07H —键盘输入(无回显) 不过滤控制字符
          AL=输入字符
    08H —键盘输入(无回显) 检测Ctrl-Break AL=输入字符 过滤控制字符
    09H —显示字符串
          输出DS:DX开始的内容,以$结尾
    0AH — 从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)
    0BH —检测输入状态
    0CH —清输入缓冲区的输入功能

move des,sou
   将源操作数复制到目的操作数
   不能用于直接将数据从一个内存位置传送到另一个内存位置,必须先将该数值传送给一个寄存器

offset x
   返回x的位置(偏移量)

jmp des
   无条件跳转到目标地址

cmp x,y
op z

  cmp x,y-比较x和y的大小,影响flag位
  检测比较结果的条件转移指令(op):
    ja x>y 高于则跳到z
    jna x<= y 不高于则跳到z
    jb x<y 低于则跳到z
    jnb x>=y 不低于则跳到z
    jnc CF=0(加法没有进位,减法没有借位),则跳到z
    je x==y 等于则跳到z
    jne x!=y 不等于则跳到z
    jz x ==y 等于则跳到z

dec x
jnz y

  x-1后判断符号位,不等于0则跳到y,等于0则向下执行

add x,y
  x=x+y
DAA
  十进制加减后需要用DAA将AL中的数值调整为正确

inc x
  x=x+1

sub x,y
  x=x-y

CALL B_TO_D16
  调用子程序输出

XLAT
  AL=BX+AL

DIV SRC
  16位被除数,除数位8位
    AL(商)=AX/SRC
    AH(余数)=AX/SRC

  32位被除数,除数为16位
    AX(商)=DXAX/SRC
    DX(余数)=DXAX/SRC

SHR AL,num
将AL中的数据左移num位
最低位用0补充

延时
DELAY PROC//循环200次
  MOV BX,200
L1:DEC BX
  JNZ L1
使用:call delay

循环
LOOP OPR
  cx!=0时,进行OPR操作

与十六进制进行操作(and/or/…)时,如果十六进制数第一位是字母(A/B/…)时前面要加0

清零
XOR AX,AX
  AX内容置零

交换
PUSH AX //把AX值压入堆栈段
PUSH BX
POP AX //把堆栈段的值赋给AX
POP BX
  堆栈段的段值为SS*10H
  偏移值为SP
  堆栈是先进后出

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值