之前学习汇编基础总结

分类:汇编 | 作者:凹凸曼 | 发表于2017/01/17

8086cpu外部总线20位=段地址*16+偏移地址   debug 里安全空间 0:200~0:3ff
od 反编译
0、debug 调试
1、fff00H-FFFFFH
-d fff0:0 ff  可以查出主板出厂时间
2、b8100H cpu 显存地址
3、数据的段地址ds获取;代码的段地址从cs获取, 栈的段地址从ss获得
4、mov ax,[0]  与[0]在debug表示内存单元 而在masn编译器里表示0   而masn 用[bx] 间接–>mov bx,1 mov ax,[bx] 在masn也可以用 mov ax,ds:[0]
在masn中
mov al,[0]          (al)=0
mov al,ds:[0]        (al)=(ds:[0])
mov al,[bx]        (al)=(ds:[bx])
mov al,ds:[bx]        (al)=(ds:[bx])

5、si和di 不能是8位 功能相似于通用寄存器bx

6、db 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0    <—-  8个0   字节型数据
dw 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0  <—-  16个0    字型
dd 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 <—-  32个0     双字

7、暂时存放数据—-通用寄存器、开辟内存、栈(push pop 推荐使用这个)

8、64速度:cpu 64bit,操作系统64bit 软件64bit

9 div 除非指令  除数 8位时被除数16位(ax)  除数16位被除数32位(dx+ax)
结果 : 8位 商放到al  余数 ah
16位 商放到Ax  余数 dx

指令格式  div reg
div 内存单元

10 65535 ffff(16位)   255 ff(8位)

11 dup 和db dw dd 伪指令  db 3 dup(0) 定义3个字节 他们的值都是0
db  3 dup (0,1,2) 定义9个字节 他们的0,1,2,0,1,2,0,1,2

12 offset  偏移

start:mov ax,0
mov bx,offset start

13 jmp 跳转 cpu不需要 提供目标地址, 提供是偏移地址
jmp short ptr   -128~127  8位    负数有补码 表示, 它往上跳, 正数往下跳
jmp near ptr   -32769~32767  16位
jmp far ptr   远 转移 必须给出目标地址

jmp word ptr
jmp dword ptr

14 栈 ss栈段地址 sp栈偏移地址
push 入栈 先sp =sp-2 再推入数据
pop 出栈  先拿出数据 再sp=sp+2

15 数据处理的两个基本问题
A:存放位置 直接寻址、寄存器寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址
B:数据有多长  寄存器(ax,al)、用操作符号x ptr(word ptr)、其他(push [1000]栈固定字型数据)

16 call和ret   函数模块化设计
call far ptr 标号 等于 push CS   push IP  jmp far ptr 标号
ret pop IP jmp ip
17 乘法 mul
mul byte ptr ds:[0] 含义 (ax)=(al)*((ds)*16+0);
mul word ptr [bx+si+8] 含义 (ax)=(ax)*((ds)*16+(bx)+(si)+8)
(bx)=(ax)*((ds)*16+(bx)+(si)+8)

18 标志寄存器
11    10   9   8    7    6    4    2    0
标志寄存器:    OF    DF    “IF”    SF    ZF    AF    “PF”    CF

默认值0:     NV    UP    EI    PL    NZ    NA    PO    NC

值1:        OV    DN    byte ptr    NG    ZR        PE    CY

ZF 结果为0 ZF=1    结果不为0 ZF=0
PF 结果为偶 PF=1    结果为奇 PF=0    二进制
SF 结果为负 SF=1  结果为正 SF=0    第7位
DF 结果为0  每次操作后si,di递增  结果为1 每次操作后si,di递减
IF 结果为0 禁止其他可屏蔽中断 反之

sti 用设置IF=1   cli IF=0

cld指令:将DF设置0   std指令:将DF设置1

movsb ds:si指向内存单元中的字节送入es:di ((es)*16+(di))=((ds)*16+(si)) DF决定si,di
rep movsb   rep的作用是根据cx的值 ,重复执行后面的串传递指令

cf=carry 进位或借  of=overflow 溢出    对于无符号数是进位-只看cf   对于有符号位是溢出–只看(of)和符号位SF

19 je 等于才转移 (检测zf=1)   jne 不等于转移 ZF=0
jb 低于转移 CF=1         jnb不低于转移 CF=0
ja 高于转移 CF=0,ZF=0    jna不高于转移 CF=1 或ZF=1

20 adc 加法 和sbb 减法 (cmp不保存结果 改变标志寄存器的值)
adc ax,bx==> (ax)=(ax)+(bx)+CF

21 pushf:将标志寄存器的值压栈 popf:从栈中弹出数据,送入标志寄存器  iret 中断恢复

22 如何设置中断向量表  (存放中断向量表 0:0~0:3ff)
中断类型码找到中断向量  并用它设置CS和IP使CPU执行中断处理程序
中断向量表存放程序入口(中断类型码*4)=ip  (中断类型码*4+2)=cs
8086CPU中断过程
A.取得中断类型码    B.pushf        C.TF=0,IF=0
D.push CS    E.push IP    F. (IP)=(N*4),(CS)=(N*4+2)
23 端口 in和out 只能使用ax al     (cmos RAM 包括一个时钟 128字节RAM  )
in al,20h  从20端口读取一个字节数据到al
out 20h,al

24 shl shr 逻辑位移指令

 

本文出自 “凹凸曼” 博客,请务必保留此出处 http://www.apoyl.com/?p=2088

Tag:

日志信息 »

该日志于2017-01-17 11:10由 凹凸曼 发表在汇编分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (0)层:

发表评论 »

« »