文章目录
- 微机基础
- 原码、反码、补码、移码
- 溢出
- 实数型
- 功能结构
- 8086/8088内部结构
- 80286内部结构
- 80386/80486内部结构
- 标志寄存器FLAGS
- 寄存器阵列
- 段寄存器
- 寻址
- 标志寄存器EFLAGS
- 分段结构
- 数据寻址方式
- 立即寻址
- 直接寻址
- 寄存器寻址
- 寄存器间接寻址
- 寄存器相对寻址
- 基址-变址寻址
- 基址-变址-相对寻址
- 隐含寻址
- 比例变址寻址
- 基址比例变址寻址
- 相对基址比例变址寻址
- 程序转移寻址方式
- 段内直接寻址
- 段内间接寻址
- 段间直接寻址
- 段间间接寻址
- 常用伪指令
- 定义 DB、DW、DD
- 等值 EQU
- 等号 =
- $ 运算符
- 段基址 SEG
- 偏移地址 OFFSET
- PTR 类型属性符
- 数据传送指令
- mov
- movsx、movzx
- push、pop
- xchg
- in、out
- lea
- 算数运算指令
- add
- adc 带进位加法
- inc 自加
- sub
- sbb 带进位减法
- dec 自减
- neg 求补
- cmp 比较
- mul
- Imul 带符号乘法
- div
- Idiv 带符号除法
- DAA BCD码修正
- 逻辑运算指令
- and
- or
- not
- xor
- test
- 移位
- 标志指令
- 转移指令
- 调用指令
- call
- proc
- RET N(偶数)
- 串操作指令
- 串传送
- 串装入
- 串存储
- 串比较
- 串搜索
- 汇编语言结构
- 方式定义
- 段定义
- 段约定
- END结束
- 返回DOS
- DOS 调用模式
- 宏指令
- 引脚功能
- 总线
- INTR、NMI
- HOLD、HLDA
- 最小模式
- 最大模式
- 总线三态
- 总线分时复用
- 总线时序
- 复位状态
- 8086和8088CPU的区别
- 读写较慢,CPU申请等待时钟
- 中断异常
- 8086中断
- 8086异常
- 优先级
- 中断响应过程
- 中断控制器8259A
- 8259A工作方式
- 1、设置优先级
- 2、屏蔽中断源
- 3、中断结束处理
- 4、总线连接方式
- 5、中断触发方式
- 中断程序与CALL程序区别
- 8259A中断结束方式
- 中断处理过程、中断处理程序
- 8259A初始化命令字
- 8259A操作命令字
- debug
- -a 汇编命令
- -d 显示内存
- -e 修改内存
- -f 填充内存
- -G 执行命令
- -h 16进制计算
- -i 端口输入
- -o 端口输出
- -L 读盘命令
- -W 写盘命令
- -M 内存搬家
- -N 写文件命令
- -r 显示修改寄存器
- -s 搜索内存
- -t 执行并显示环境
- -u 反汇编
微机基础
原码、反码、补码、移码
正数原码、反码、补码相同
负数反码是原码除符号位按位取反,补码是反码+1
移码是补码的符号位取反,其他不变(只是用1表示正数,0表示负数)
[+0]反 = (0000 0000)
[-0]反 = (1111 1111)
(x+y)补 = (x)补 + (y)补
(x-y)补 = (x)补 + (-y)补
溢出
只有 (正+正=负)才会上溢,(负+负=正)才会下溢
Cs:最高位符号位的进位或借位
Cp:数值最高位的进位或借位
Cs=0,Cp=1 正溢出
Cs=1,Cp=0 负溢出
有符号数运算:OF为1 溢出
无符号数运算:CF位1 溢出
实数型
功能结构
8086/8088内部结构
执行部件 EU :
- 算数逻辑单元 ALU
- 16位标志寄存器
- 4个通用寄存器、2个16位指针寄存器、2个16位变址寄存器
- 指令译码器
- 总线控制电路
总线接口部件 BIU:
- 4个16位段寄存器
- 1个16位指令指针
- 1个地址加法器
- 1个指令流队列
- 总线控制电路
EU 从 BIU的指令流队列中取指令,发出相应的控制命令序列,执行指令
操作数地址EU计算出16位的偏移量送BIU,BIU将其与段寄存器合成,得到一个20位的内存单元物理地址,与内存单元交换数据
也可以根据EU请求和IO接口电路交换数据
80286内部结构
具备8086/8088最基本功能
还增加了:虚拟存储、特权保护、任务管理等功能,支持多用户、多任务系统
80386/80486内部结构
标志寄存器FLAGS
6个状态标志:
- CF 进位标志(无符号数有无溢出)
- PF 奇偶标志(低8位中1的个数)
- AF 辅助进位标志(低四位有无向低五位进位借位1)
- ZF 零标志(全零为1)
- SF 符号标志(负数1正数0)
- OF 溢出标志(溢出1)
有符号数 a,b比大小(a-b)
OF ⨁ SF = 1 ,a < b
OF ⨁ SF = 0, a ≥ b
3个控制标志
- DF 方向标志(字符串指令的方向,逆向1)
- IF 中断允许标志(可接受并响应中断1)
- TF 陷阱标志(控制单步中断1)
寄存器阵列
4个通用寄存器:
- AX 累加器
- BX 基址寄存器
- CX 计数器
- DX 数据寄存器
2个变址寄存器:
- SI 源变址寄存器
- DI 目的变址寄存器
2个指针寄存器:
- SP 堆栈指针
- BP 基址指针
段寄存器
- CS 代码段基址
- DS 数据段基址
- ES 附加段基址
- SS 堆栈段基址
寻址
- 寻址程序:CS + IP
- 寻址数据:DS|ES + SI|DI|BX|BP
- 寻址堆栈:SS + SP|BP
标志寄存器EFLAGS
- IO 输入输出特权标志(4个状态,00特权最高,11最低,特权可执行否则保护异常)
- NT 嵌套任务标志(发生中断时或调用指令时发生任务切换,即当前任务嵌套在另一个任务中,1)
分段结构
- 逻辑地址: (段地址 : 偏移地址)
- 物理地址: (段地址 * 10H + 偏移地址)
数据寻址方式
立即寻址
mov ax, 1200h
/*
指令中的源操作数是立即数,即参加操作的数据本身,
立即寻址仅适合于源操作数,在代码段。
直接寻址
Mov ax, [1200h]
; 默认是在数据段 DS,给出偏移地址。
mov ax, es:[1200h] ; 修改指定段
寄存器寻址
mov ax, bx ; 在通用寄存器中,所以速度最快
寄存器间接寻址
mov ax, [si]
; 操作数在内存中,偏移地址为寄存器的值
;(也叫间接寄存器,bx、bp、si、di)
; bx、si、di 默认在数据段DS
; bp 默认在堆栈段SS
; bx、bp 基址寻址,si、di 变址寻址
寄存器相对寻址
mov ax, [bx+ data] ; 偏移地址为寄存器值加一个位移量
基址-变址寻址
mov ax, [bx][si]
; 基址寄存器 +变址寄存器
; 不能都为基址寄存器,也不能都是变址寄存器
; bx 默认是 ds段,bp 默认是 ss段
基址-变址-相对寻址
mov ax, data[bx][si] ; 加了一个位移量
隐含寻址
mul bl
; al * bl -> ax
; 指令中隐含了一个或两个操作数的地址
比例变址寻址
mov eax, array[ebx * 4] ; [位移量 + 变址寄存器 * 比例因子]
mov AL, [SI + 2]
基址比例变址寻址
mov ax, [ebx + ecx * 4] ; [基址寄存器 + 变址寄存器 * 比例因子]
相对基址比例变址寻址
mov al, array[ebp + edi * 2] ; [位移量 + 基址寄存器 + 变址寄存器 * 比例因子]
32位变址寻址才有比例因子,16位只有SI、DI
程序转移寻址方式
段内直接寻址
jmp 0021
jmp short next
段内间接寻址
jmp bx
jmp data[bx][si]
段间直接寻址
jmp 51bb:0024
jmp far ptr next ; far ptr 段间转移操作符
段间间接寻址
jmp dword ptr [bx]
常用伪指令
定义 DB、DW、DD
N1 DB 12H,2,3,22 ; 变量名 DB 数据 ,数据如果是字母开头,前面要加0
N2 DB 3 DUP(?) ; 3 dup 表示重复的次数,?表示随机数
等值 EQU
NUM EQU 22
MOV al, MUM ; 等价于 mov al, 22
等号 =
; 同 EQU
; 区别是 EQU定义的后续不能更改,=定义的后续可以重新定义
$ 运算符
; 返回汇编地址计数器的当前值
; 紧跟DB、DW、DD后面统计字符串长度
N1 DB 12H,2,3,22
LEN EQU $-N1
段基址 SEG
MOV AX, SEG DATA ; 返回逻辑段的段基址
偏移地址 OFFSET
MOV BX, OFFSET BUF ; 返回相对段首的偏移地址
PTR 类型属性符
P T R ( 内 存 单 元 寻 址 方 式 ) = { B Y T E 字节 W O R D 字 D W O R D 双字 PTR(内存单元寻址方式)= \begin{cases} BYTE& \text{字节}\\ WORD& \text{字}\\ DWORD& \text{双字} \end{cases} PTR(内存单元寻址方式)=⎩⎪⎨⎪⎧BYTEWORDDWORD字节字双字
P T R ( 子 程 序 名 称 ) = { F A R 远 N E A R 近 PTR(子程序名称)= \begin{cases} FAR& \text{远}\\ NEAR& \text{近}\\ \end{cases} PTR(子程序名称)={FARNEAR远近
; 临时修改说明类型属性
; 指令操作数至少有一个类型属性确定,否则必须用PTR说明内存操作数的类型
; 若两个操作数类型属性明确,则必须保持一致,否则使用PTR临时改变其中内存操作数的类型
; 类型明确的操作数
寄存器、变量名直接寻址的
; 类型不明确的操作数
立即数、非变量名直接寻址的,也就是带[ ]的
使用:
- 源操作数是立即数,目标操作数类型不明确,必须用PTR说明类型属性
- 二者类型属性不一致,必须用PTR临时修改操作数的属性
- 单操作数时(INC、DEC等),类型不明确,必须使用PTR说明属性
数据传送指令
mov
立即数只能作为源操作数
字长宽度必须相同,否则使用PTR说明属性
不允许同时为段寄存器、不允许同时为操作数
目标操作数是段寄存器时,源操作数不能是立即数
ip 和 cs 不能作为目标操作数,flags 一般也不作为操作数
不影响标志位
movsx、movzx
带符号扩展 movsx:
movsx eax, cx ; cx = 0AB20H ; eax = FFFFAB20H,cx 是负数,符号位为1,所以用1扩展
不带符号扩展 movzx:
movzx eax, cl ; cl = 0FAH ; eax = 00000FAH,cx 是负数,符号位为1,这里用0扩展
push、pop
以字为单位,16 位
可以是段寄存器、通用寄存器、立即数、存储单元、所有的寻址方式,但8086不允许是立即数
push 高地址到低地址,pop 低地址到高地址
xchg
交换操作数的内容,类型必须相同,其中之一必为寄存器
操作数可以说是除立即数以外的任何寻址方式,可以同时为寄存器,但不能同时为段寄存器,不影响标志位
xchg AH, BL xchg ES, AX
in、out
面向 io 端口操作
in al, port
out port, al
存放到 al 或 ax 中,port 指的是地址
port 端口地址寻址
- 直接寻址:8 位,即 256 个端口
- 间接寻址:16 位,端口地址必须由 dx 指定,即 64k 个端口
lea
LEA bx, [di] ; 取出源操作数的有效地址
; 源操作数不允许是立即数和寄存器寻址,只能是存储器寻址
; 目的操作数不能是段寄存器
算数运算指令
均会影响6个标志位,属性要一致
add
add [si], [bx] ; 不允许同时是存储器操作数
add ds, ax ; 不允许把段寄存器作为操作数
adc 带进位加法
adc oprd1, oprd2; 多加一个进位标记符 cf,a+b+c
; 多用于多字节数相加,使用前需要先把 cf 清零
; clc 指令,cf 清零
inc 自加
inc oprd ; 自加 1,不能是段寄存器或立即数,不影响进位CF
sub
a-b
sbb 带进位减法
a-b-c
dec 自减
a-1 ; 不影响进位CF
neg 求补
neg oprd ; 0-a,相反数
cmp 比较
cmp oprd1, oprd2 ; a-b,不改变原值,不返回结果,只改变标志位
; 目的操作数不能是立即数、必有一个是寄存器,不能是段寄存器
mul
mul oprd
; 字节相乘,8位,被乘数 AL,乘数 oprd,高位积 AH 低位积 AL
; 字相乘,16位,被乘数 AX,乘数 oprd,高位积 DX,低位积 AX
; 乘数、被乘数等长,积双倍长
Imul 带符号乘法
; 有符号乘法,乘数先变为原码,去掉符号位绝对值相乘,符号由原符号位异或得到,负数则再取补码
Imul oprd1, oprd2 ; oprd1 = oprd1 * oprd2
Imul oprd1, oprd2, 立即数 ; oprd1 = oprd2 * 立即数
div
div oprd
; 字节相除,8位,被除数 AX,除数 oprd,商 AL,余数 AH
; 字相除,16位,被除数 高DX 低AX,除数 oprd,商 AX,余数 DX
; 被除数是除数的长度两倍
; 目的操作数必须是累加器 AX,源操作不能是立即数
Idiv 带符号除法
; 有符号除法,除数先变为原码,去掉符号位绝对值相除,符号由原符号位异或得到,负数则再取补码
DAA BCD码修正
mov al, 06h
add al, 07h ; 得到 0Dh (13),0000 1101
DAA ; BCD码修正 (13) 0001 0011
逻辑运算指令
and
and bl, [si] ; 按位相与
and al, 0fH ; 部分位为 0
and ax, ax ; 不改变操作数下,清零 of 和 cf
or
or bl, [si] ; 按位相或
or al, 0fH ; 部分位为 1
or ax, ax ; 不改变操作数下,清零 of 和 cf
not
not oprd ; 按位取反,返回原地址
; 不能是立即数
; 对标志位无影响
xor
xor oprd1, oprd2
xor ax, ax ; 自身清零
test
test oprd1, oprd2 ; 执行 and,结果不返回 oprd1
; 用于测试某些标志位的状态
移位
; 算数左移和逻辑左移一样
; 逻辑右移补零填充,算数右移用原来的最高位来填充(理解为符号位)
; 带进位循环左移,带进位循环右移,CF也参与循环
; 不带进位循环左移,不带进位循环右移,CF不参与循环
标志指令
CLC ; CF = 0
CMC ; CF 取反
CLD ; DF = 0
STD ; DF = 1
CLI ; IF = 0
STI ; IF = 1
转移指令
; 根据标志位 C、Z、S、P、O 转移
调用指令
call
; 无条件跳转子程序
call 过程名
RET ; call的下一条指令
proc
过程名 proc 属性
子程序
RET
过程名 ENDP
; 属性 NEAR、FAR
; NEAR 缺省,同一代码段
; FAR,不在同一代码段
RET N(偶数)
; NEAR 栈顶弹出2个字节 IP
; FAR 栈顶弹出4个字节 IP CS
RET N
; 表示弹出 IP和CS以后,堆栈指针再向下移动 N个字节
串操作指令
串传送
REP MOVSB ; ES:DI <- DS:SI
REP MOVSW
REP MOVSD
; 根据 CX 重复执行
; CLD 将 DF标志置 0,正序
串装入
LODSB ; AL <- DS:SI
LODSW
LODSD
串存储
STOSB ; ES:DI <- AL
STOSW
STOSD
; 重复前缀 REP
串比较
CMPSB ; ES:DI - DS:SI
CMPSW
CMPSD
; 改变 ZF标志
; REPE 相等继续重复
; REPNE 不相等继续重复
串搜索
SCASB ; AL - ES:DI
SCASW
SCASD
; 也就是用减法找是否存在字符,改变 ZF标志
; REPE 相等继续重复
; REPNE 不相等继续重复
汇编语言结构
方式定义
.586 ; CPU类型的机器指令
; 默认 .8086
段定义
; 段名 SEGMENT [定位参数、链接参数、分类名] 段长度
DATA SEGMENT USE16
DATA ENDS
; USE16,逻辑段16位寻址方式
; USE32,逻辑段32位寻址方式
; 单一模块程序,堆栈段分类名应为 STACK,且不可省略,其他逻辑段可以缺省3个属性
段约定
ASSUME CS:CODE,DS:DATA,SS:STACK
; 习惯代码段第一句,约定不执行
END结束
END BEG ; 作为源程序的结束最后一句,同时也指明了CPU开始执行的入口
返回DOS
MOV AH,4CH
INT 21H
DOS 调用模式
MOV AH, 功能号 ; 设置入口参数
INT 21H ; 分析出口参数
; 20H、27H程序退出,21H系统功能调用,25H、26H磁盘RW中断
; 22H、23H、24H 专用中断,用户不能使用
功能号:
- 01H:等待键入一个字符,有回显,AL=按键的ASCII,响应CTRL+C
- 02H:显示一个字符,DL=要显示的字符ASCII,响应CTRL+C
- 07H:等待键入一个字符,无回显,AL=按键的ASCII,不响应CTRL+C
- 08H:等待键入一个字符,无回显,AL=按键的ASCII,响应CTRL+C
- 09H:显示字符串,DS:DX=字符串地址,必须$结尾,响应CTRL+C
- 0AH:等待键入字符串写入缓冲区,DS:DX=存放字符串的缓冲区,第一个字节缓冲区容量,第二个字节实际长度,第三个字节开始填充ASCII,最后一个字节ODH回车
宏指令
- 不同于子程序,子程序可以先调用后定义,宏要先定义后调用,习惯放在程序首部
- 子程序由CPU完成,宏由编译过程完成,也就是将宏代码复制到调用的位置
宏名 MACRO [形参表]
。。。。。; 宏体
ENDM
LOCAL 标号名
; 放在宏定义 MACRO下一句,定义局部标号,可以与源程序的标号、变量重名
引脚功能
总线
数据总线、地址总线、控制总线
INTR、NMI
- INTR 可屏蔽中断请求信号
- NMI 非屏蔽中断请求信号
HOLD、HLDA
- HOLD 总线保持请求信号(输入)
- HLDA 总线保持响应信号(输出)
最小模式
系统只有一个8086/8088处理器,直接产生所有的总线控制信号,总线控制电路减到最少
最大模式
相对最小模式,有多个微处理器
主处理器8086/8088,其他的叫协处理器
总线三态
逻辑1、逻辑0、浮空三种状态
浮空态总线电路极高输出阻抗
三态保证任何时刻只能相互交换信息的设备占用总线,和数据的快速传送DMA提供必要条件
总线分时复用
因为外部引脚数量的限制,采用总线分时复用
8086总线低16位分时复用,8088只能传输8位数据,只有8个地址引脚兼数据引脚
总线时序
- 总线周期:CPU通过系统总线对外部存储器或IO接口一次访问要的时间
- 时钟周期:CPU的基本时间计量单位,一个基本周期由4个时钟周期组成,T1、T2、T3、T4,当存储器和外设速度较慢时,T3后面会插入多个等待状态Tw
复位状态
复位信号线RESET高电平,CPU结束现行操作
CS置FFFFH,其余片内寄存器清零
8086和8088CPU的区别
1、8086 为M/^IO引脚,8088 为 IO/^M,也就是电平相反
2、8086 16个地址数据复用引脚 AD0~AD15,8088 8个地址数据复用引脚 AD0~AD7
3、8088 没有^BHE/S7,而是^SS0
读写较慢,CPU申请等待时钟
存储器或IO设备读写较慢时,在没有完成读写时应输出一个低电平信号,完成时输出高电平信号。
该信号经8284时钟电路同步后,加入到CPU的READY端,当检测到信号为低时在T3、T4间插入等待Tw,直到READY为高电平进入T4周期
中断异常
- 中断:外部事件而改变执行的流程,转去处理外部事件
- 异常:内部意外而改变执行的流程,报告出错情况状态
中断外部引发,异步执行
异常因指令不能成功执行,报告出错状态,同步执行
8086中断
- 可屏蔽中断:INTR(高电平),受 IF标志影响,IF=1 允许中断,IF=0 禁止中断
- 非屏蔽中断:NMI(上升沿),不受 IF标志影响,通常处理应急事件、电源故障
8086异常
- 故障:可被恢复执行的异常,指令执行之前报告状态,排除故障后,IRET返回到故障指令并执行
- 陷阱:异常指令执行之后报告状态,IRET返回到陷阱指令的下一条,受 TF影响单步中断
- 中止:严重错误产生的异常,中止程序不可恢复
优先级
- 中断优先级:多个中断源请求中断,若A和B不会被中断请求打断,那就是同优先级中断,若暂停A中断转去执行B中断,那就是中断嵌套
- 中断优先次序:优先级相同的中断源同时请求中断,谁能最先得到响应
中断响应过程
- 标志寄存器FLAGS压栈
- 清除标志TF、IF
- CS内容压入堆栈
- IP内容压入堆栈
- 取出相应中断矢量给IP和CS,转到执行中断程序
中断服务程序4个部分:保护现场、中断服务、恢复现场、中断返回
中断控制器8259A
单片8259A可以管理8个中断源,多片级联管理,1个主片 8个从片可以管理64个中断源
主要依赖内部寄存器 IRR、IMR、ISR
8259A工作方式
1、设置优先级
- 正常完全嵌套:最常用,按优先级处理,IR0级别最高,不响应同级或低级中断,响应高级中断
- 特殊完全嵌套:响应同级中断,特殊嵌套
- 优先级自动循环:多个中断源优先级相同时,一个被响应后优先级降到最低,相邻的中断变成最高,循环
- 优先级特殊循环:通过程序设定中断源优先级最低
2、屏蔽中断源
- 普通屏蔽:设置 IMR某位 1或0来 屏蔽或允许
- 特殊屏蔽:动态改变系统优先级结构
3、中断结束处理
- 中断自动结束:当第二个中断响应脉冲^INTA送到 8259A后,会自动清除中断服务寄存器 ISR中的对应位
- 中断结束命令:普通EOI、特殊EOI
- 普通EOI:自动把 ISR中优先级最高的非零 IS复位,适用全嵌套,即结束当前正在服务的中断
- 特殊EOI:指出要清除 ISR哪一位复位,适用任何优先级
4、总线连接方式
- 缓冲方式:通过总线驱动器和数据总线相连
- 非缓冲方式:总线负载允许,直接挂在数据总线上
5、中断触发方式
边沿触发:IR 上升沿中断信号
电平触发:IR 高电平中断信号
中断程序与CALL程序区别
CALL是同步,中断是异步
CALL只需压入下一条指令的断点地址,中断需要压入标志寄存器FLAGS、断点地址,外部硬件获取中断类型码计算中断矢量地址,从中断矢量表中获取中断矢量给 CS:IP
CALL 返回指令 RET,中断返回指令 IRET
CALL可以远程调用也可以近程,中断一定是远程调用
传参方式不同,中断一般不能采用寄存器或堆栈传参,因为无法在转入中断服务前设置入口参数
8259A中断结束方式
在中断服务结束返回之前,一定要安排发中断结束命令
目的清除 ISR中相应位,告示结束本次中断。如果不清除仍为1,表示请求已响应且未结束。
优先级同级或低级中断请求将一直挂起
中断处理过程、中断处理程序
- 中断处理过程:申请中断、响应中断、处理中断、中断返回
- 中断处理程序:保护现场、中断服务、恢复现场
8259A初始化命令字
初始化命令字:初始化阶段发送给8259A,用来规定基本操作的命令字
- ICW1:设置中断请求信号(脉冲或电平)、工作方式(单片或级联)、是否需要初始化命令字 ICW4
- ICW2:设置中断类型号基值
- ICW3:仅用于级联,指明主片哪一个中断源(IR0~IR7)与从片的 LNT引脚相连
- ICW4:设置嵌套方式(正常或特殊)、 缓冲方式、结束方式(正常或自动)
8259A操作命令字
操作命令字:用于控制8259A操作的命令字
- OCW1:设置中断源屏蔽状态
- OCW2:控制中断结束方式、修改优先权管理方式
- OCW3:管理特殊的屏蔽方式和查询方式
debug
-a 汇编命令
-a [段寄存器|段地址]:[段内偏移]
; 显示段地址和段内偏移并等待用户从键盘逐条键入汇编命令
; 逐条汇编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域
-d 显示内存
-d [地址] [范围]
; 显示指定范围内存的内容
-e 修改内存
-e [地址] [内容表]
; 可连续修改内存,将内容表逐一写入地址开始的单元
-f 填充内存
-f [起始] [长度|地址] [内容表]
; 将内容表中的值逐个重复填入指定范围
-G 执行命令
-G=[地址],[断点]
; 执行内存中指定序列
; 从 cs:ip 开始执行
; 从指定地址开始执行,到断点停止
-h 16进制计算
-h b3 12
; 返回 16进制数的和与差
-i 端口输入
-i [端口地址]
; 从指定端口接收信息并将输入的内容显示出来
-o 端口输出
-o [端口地址] [字节]
; 将字节从指定的端口输出
-L 读盘命令
-N demo
-L [地址] [驱动器号] [起始逻辑扇区] [所读扇区个数]
; 将<驱动器号>指定的盘上,从<起始逻辑扇区>起共n个逻辑扇区上的所有宇节顺序读入指定内存地址开始的一片连续单元。
; 当L后的参数缺省时,必须在L之前由N命令指定(或进入DEBUG时一并指出)所读驱动器文件名。此时L执行后将该文件装入内存
-W 写盘命令
-W [地址] [盘号] [起始逻辑扇区] [所写扇区个数]
; 与L命令不同的地方是将内存从<地址>起始的一片单元内容写入指定扇区。
; 只有 W而没有参数时,与N命令配合使用将文件写盘
-M 内存搬家
-M [源地址] [范围] [目标地址]
; 把<源地址范围>中的内容顺序搬至<目标起始地址>起的一片连续单元。
; 其中源及目标地址若仅输入偏移量,则隐含相对DS
-N 写文件命令
-N [文件说明]
; 为L|W 命令指定待装入|写盘文件
-r 显示修改寄存器
-r [寄存器]
; 显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址,代码及汇编语句形式。
; 其中对状态标志FLAG以每位的形式显示
标志位 | 溢出 of | 方向 df | 中断 if | 符号 sf | 零 zf | 辅助 af | 奇偶 pf | 进位 cf |
---|---|---|---|---|---|---|---|---|
状态 | 有无 | 减增 | 开关 | 负正 | 零非 | 有无 | 偶奇 | 有无 |
显示 | OV| NV | DN| UP | EI| DI | NG| PL | ZR| NZ | AC| NA | PE| PO | CY| NC |
-s 搜索内存
-s [地址范围] [表]
; 范围中找表中内容,找到后返回表中元素相应地址
-t 执行并显示环境
-t [=地址], [条数]
; 执行由指定地址起始的、由<条数>指定的若条命令。
; <地址>的缺省值是当前的 ip
; <条数>的缺省值是 1条
-u 反汇编
-u [地址|范围]
; 将指定范围内的代码以汇编语句形式显示,同时显示地址及代码
; 地址及范围的缺省值是上次 U指令后下一地址的值。这样可以连续反汇编