17-21-32-(35)(45)(58)59-(61)(75)95-(108)(127)132-(142)(146)159-(172)181-(185+)187-192-(195)-(199)-(206)242-(250)-(262)
-(269)(277)-(297)(305)(345)
review:
(32)
0-7H RAM
8-9H 显存
a-fH ROM
条件转移:jmp
栈:call ret
分段选址:int iret cmp loop
机器码--助记符--》汇编指令
8bit = 1byte
执行过程
汇编指令-->内存--》CPU
找地址+读or写+数据 ---- 街上(找)(哪个房子)里的(人)
总线:地址+控制+数据
存储单元(n)---逻辑存储器(1)
存储器:AX BX CX DX --MOVE AX BX
ax--16位运算 al、ah--8位运算--溢出不保留
注意位数运算必须一致 16*16 8*8
一维角度思考选址 (学校--体育馆--图书馆)
物理地址(20位)=段地址(CS-16位)*16+偏移地址(IP-16位) 《--》 段地址2进制数据<<4 + 偏移地址
段寄存器:CS DS SS ES --指令:JMP cs:ip or JMP AX <-->JMP cs:cs
栈:ss:sp
8086CPU不支持数据直接收入段寄存器
move bx,1000h
move bs,bx
move al,[0] / move [0],al
Debug命令:R(查看修改寄存器cs ip等) D(查看寄存器内容) E(写机器代码) A(写汇编代码) U T P (48p)
mov ax,ax 2字节 == mov ax,0 3字节
-----------------
程序返回
mov ax,4c00 --debug T命令执行
int 21H --debug P命令执行
编译 masm x;
链接 link x;
SA+10H:0 PSP
inc bx == add bx,1 //bx si di
mov cx,11 重复loop -- cx: 11+1次累加 --debug G命令 跳转指令 P命令 进入下一跳指令
s: add ax,ax
loop s
asm文件原 [] 与 debug执行 [] 有区别(124p)
可用单元? 0:200~0:2ff
-----------------
end 通知结束 指明程序入口
dw 数字数据
db '字符串数据'
dd '双字节'
db 3 dup(0) ; db 0, 0, 0
db 3 dup(0,1,2) ;db 0,1,2,0,1,2,0,1,2
start 指明运行入口
[bx+si] [bx][si]
[bx+3] 3[bx] [bx].3 [bx].10h[si]
----------------
reg (寄存器):ax bx cx dx sp bp si di
(ah al, bh bl, ch cl, dh dl)
(173p)[bx bp si di] ss:bp ds:!dp
sreg(段寄存器):ds ss cs es
(224p)
flag--(0,2,4,6,7,8,9,10,11)
zf 结果为0
pf 是否为偶
sf 是否为负
cf 是否借位 -无符号
of 是否溢出 -有符号
(244p)
df si、di是否递增 movsb | movsw
cld | std
sf=1, of=0 ==>ah>bh
sf=1, of=1 ==>ah>bh
sf=0, of=1 ==>ah<bh
sf=0, of=0 ==>ah>=bh
mov word ptr(177p)
mov byte ptr
push 子操作
(245p)
pushf
popf
mul(211p)
mul reg
mul 内存单元
div(181p)
abc(231p) +cf
sbb(233p) -cf
cmp(234p)
jmp short 标号 EB**
jmp near ptr 标号
jmp far ptr 标号 EB****
jmp 16位 reg
jmp word ptr 内存
jmp dword ptr 内存
(196p)
jcxz 标号 条件 cx==0
loop 标号 条件 cx==cx-1 cx 不等于 0
(237p)
je zf=1
jne zf=0
jb zf=1
jnb cf=1
ja cf=0&&zf=0
jna cf=1||zf=1
(202p)
ret IP
retf CS IP
iret (251p)
(204p)
call 标号
call far ptr 标号
call 16位 reg
call word ptr 内存单元地址
call dword ptr 内存单元地址
B8000H~BFFFFH 彩色区 (200p)
e B890:0 ->42 02 43 02 44 02 ->绿色abc
b807 --第二行
b814 --第三行
b828 --第四行
(210p)
标号:
指令
ret
(250p)
中断向量 0:0~0:03ff
iret
0:200~0:2ff(255p)
(272p)
int 10h
int 21h
(277)
端口 0~65535
in al|ax,数据|dx
out 数据|dx,al|ax
逻辑移位
shl
shr cl > 位移大于1
IF寄存器
sti, IF = 1
cti, IF = 0
314p
int 9 与 int 16h
int 13h
逻辑扇区号=(面号**0+磁道号)*18+扇区号-1
int() --取商
rem() --取余
面号=int(逻辑扇区号/1440)
磁道号=int(rem(逻辑扇区号/1440)/18)
扇区号=rem(rem(逻辑扇区号/1440)/18)+1