汇编

汇编语言

1.在8086cpu加电或复位后,即CPU刚开始工作后,CS=FFFFH,IP=0000H

  • debug使用
mount c c:\
C:\
debug
  • mov指令

mov dst, src

dst可以为寄存器

src可以为立即数,寄存器,存储单元

不能直接将数据送入段寄存器,需要用通用寄存器中转,一般用ax

  • debug指令

-d 查看内存区域

-u 以汇编形式查看内存区域

-r 查看cpu状态以及寄存器信息

-e 写机器码

-a 写汇编代码

-t 单步运行

到了int 21h要用 -p执行

-g + 地址 从指定地址开始调试(IP中的值)

-p 自动执行完剩下的循环指令

  • ()符号

(内存地址)表示这个内存地址中存放的内容

()里面可以放:1、寄存器名 2、段寄存器名 3、内存单元的20位物理地址

  • LOOP指令

LOOP 标号

CPU执行loop指令时,1、(cx) = (cx) -1 2、判断cx中的值,不为零则转至标号处执行

要点:

​ 1、在cx中存放循环次数

​ 2、LOOP指令中的标号要在LOOP指令之前定义

​ 3、要循环执行的程序段,放在标号和LOOP之间

在汇编源程序中要是用mov ax, [0]的指令要给出明确的段寄存器,如:mov ax, ds:[0]

安全空间:0:200~0:02ff(256字节)

  • 字符大小写转换

小写字符第五位为1,大写字符第五位为0

  • 寄存器间接寻址
MOV AX, [BX+200]
MOV AX, [200+BX]
MOV AX, 200[BX]
MOV AX, [BX].200
  • 基址变址寻址
MOV AX, [BX+SI]
MOV AX, [BX][SI]
  • 基址变址寻址且相对寻址
MOV AX, [BX+200+SI]
MOV AX, [BX+SI+200]
MOV AX, [200+BX+SI]
MOV AX, 200[BX][SI]
MOV AX, [BX][SI].200
MOV AX, [BX].200[SI]
  • LABEL伪指令定义的变量不能使用

TOP LABEL WORD

  • div除法指令

被除数:如果除数为八位,被除数放在AX中;如果除数为16位,被除数放在DX:AX中,DX为高八位

结果:如果除数为八位,AL存商,AH存余数。如果除数为16位,AX存商,DX存余数

  • 无条件转移指令JMP

JMP SHORT 标号 对IP的修改范围不超过-128~+127

JMP NEAR PTR 标号 对IP的修改范围不超过-32768~+32767

JMP FAR PTR 标号指令后高地址为段地址,低地址为偏移地址 段地址:偏移地址

JMP REG IP=reg

JMP WORD PTR 内存单元地址 IP=内存单元的数据(段内转移)

JMP DWORD PTR 内存单元地址 CS=内存单元地址+2 IP=内存单元地址

  • 自减指令

DEC DST

  • 有条件转移

所有有条件转移指令都是短程转移,-128~+127

JCXZ = if((cx) == 0) jmp short 标号

  • REF与REFT

REF 从栈中修改ip的内容,实现近转移

REFT 从栈中修改IP和CS中的内容,先弹出IP,后弹出CS

  • int 21h

从键盘输入,并且回显

  • call指令

CALL 标号 将当前IP压栈后,转移到标号处,不能进行短转移

CALL FAR PTR 标号 将当前CS、IP压栈,转移到标号处

CALL WORD PTR 内存单元地址

CALL DWORD PTR 内存单元地址

  • mul乘法指令

8位:乘数在AL中,结果放到AX中

16位:乘数在AX中,结果放到DX:AX中

  • ADC指令

带CF位的加法指令

  • SBB指令

带CF为的减法指令

  • CMP比较指令

只做减法影响PSW,不保存结果

有符号数的比较主要看SF和OF,SF用于判断A是否大于B,OF用于判断是否有溢出

  • 条件转移指令

    JE 等于则转移

    JNE 不等于则转移

    JB 低于则转移

    JNB 不低于则转移

    JA 高于则转移

    JNA 不高于则转移

  • DF标志

    DF=0 每次操作后,SI、DI递增

    DF=1 每次操作后,SI、DI递减

  • 串指令

MOVSB 把DS:SI处的字节送入ES:DI中,然后SI、DI递增或递减1

MOVSW 把DS:SI处的字送入ES:DI中,然后SI、DI递增或递减2

REP MOVSB/REP MOVSW 相当于S:MOV SB LOOP S

CLD和STD用于对DF的改变,CLD->DF=0,STD->DF=1

内中断

中断源 中断码

除法错误 0

单步执行 1

执行into指令 4

执行int n指令 n

  • 中断向量表

中断向量表放在0000:0000到0000:03FF单元中,每个重点向量两个字,段地址(高字节):偏移地址

  • 中断过程

1、取得中断类型码

2、标志寄存器的值入栈

3、设置标志寄存器TF和IF的值为0

4、CS入栈

5、IP入栈

6、根据中断向量表设置相应的CS、IP

中断处理程序结束时,用IRET返回,相当于:

POP IP
POP CS
POPF
  • INT 21H功能号

9号功能:在光标处显示DS:DX指向的字符串,字符串需用$做结束符

端口

  • 端口读写命令

IN DST, STR

OUT DST, STR

DST只能为AX或AL,八位端口用AL,16位端口用AX

  • 逻辑移位

SHL DST, CNT 逻辑左移

SHR DST, CNT 逻辑右移

当CNT大于1时要用CL给出

  • ASCII字符

0DH 回车

0AH 换行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值