XiaoXiao_16位汇编学习随手记



8086 cpu  


寄存器的说明-------------------------------------------------------------

ax bx cx dx sp bp si di ip (通用寄存器)

ax bx dx si di

ax 是十六位寄存器 系统位

ax = al + ah

al 代表 ax 的低位

ah 代表 ax 的高位

bx 是八位寄存器

[bx] 代表着 ds:[bx]

[dx] 代表着 es:[dx]

cx sp bp ip

cx(关联循环次数和判断)

sp(关联栈的指针指向)

bp()

ip(关联代码段的偏移地址)

ds es ss cs (段寄存器) .. 数据段 扩展段 栈段 代码段

注意:

        通用寄存器间    [bx+dx] [si+di] 这两种组合的错误的!!!

汇编里数据的定义--------------------------------------

*.asm

db (byte) 字单元
bw (word)
dd (double word) 双字

db 0,0,0,0/db 4 dup(0) 00 00 00 00
db '0123' 30 31 32 33
db 0,1,2,3 00 01 02 03

bw 0,0,0,0/dw 4 dup(0) 00 00 00 00 00 00 00 00
bw 0,1,2,3 00 00 01 00 02 00 03 00
bw '0','1','2','3' 00 00 31 00 32 00 33 00

dd 0,0/dd 2 dup(0) 00 00 00 00 00 00 00 00
dd 0,1 00 00 00 00 01 00 00 00
dd '0','1' 30 00 00 00 31 00 00 00
dd '0123','4567' 33 32 31 30 37 36 35 34

word ptr / dword ptr  / short ptr / near ptr

offoset 标号

整理16位汇编语之<伪指令>
伪指令 伪指令用法
db

字节(Byte)8位

    用法:

        db <数据>

dw

字(Word)16位

    用法:

        dw <数据>

dd

双字(DoubleWord)32位

    用法:

        dd <数据>

数据

0,0,0,0            4个,几 位的数    也可以这样写:4 dup(0)

'0','0','0','0'      4个,几 位的字符 (ASCII)    也可以这样写:4 dup(’0‘)



汇编指令的使用------------------------------------
mov ax,bx ;ax=bx

add ax,1 ;ax=ax+1

inc ax ;ax++

xor ax,1 ;ax=ax-1

dec ax ;ax--

push ax ;入栈 cpu: sp=sp-2 ss:[sp]=ax

pop ax ;出栈 cpu: ax=ss:[sp] sp=sp+2

(循环标号)


...


loop (循环标号) ;循环判断 cx == 0 不等 就跳转至标号处 ,相等 就不跳转

执行是 cpu: cx=cx-1 cx==0 

jmp ;无条件跳转

用法:jmp ax,jmp cs:bx ,jmp short 标号 jmp near ptr 标号

jcxz;有条件跳转 当 cx==0 跳转 cx!=0 不跳转

nop 无指令 代表一字节空间


整理汇编指令之<寻常指令>
指令 用法 说明
mov mov ax,bx 赋值指令 mov ax,bx ;将 bx 值 赋于 ax
push push ax

入栈指令 push ax ;将 ax 值压人栈中

        cpu 内部工作    sp=sp-2,ss:[sp]=ax

pop pop ax

出栈指令 pop ax ;将 栈指针指向的值取出赋于ax

        cpu 内部工作    ax=ss:[sp],sp=sp+2

jmp

jmp short

jmp btye ptr [*]

jmp near ptr

jmp word ptr [*]

jmp far ptr 

jmp dword ptr [*]

无条件跳转指令

    short 段内短转移

    near  段内近转移

    far     段间远转移

jcxz jcxz 标号

有条件跳转指令 短转移

    cpu 内部工作 cx==0 等跳 不等不跳 跟 loop 相反

loop 标号 ... loop 标号

循环指令 短转移

        cpu 内部工作    cx=cx-1 判断 cx==0 不等跳 等不跳

     
nop   无指令代表1(byte) 的空代码空间
整理汇编指令之<算法指令>
指令 用法  说明
add add ax,1 不带进位加法指令
adc add dx,1 带进位加法指令
inc inc ax 自身加1指令   代表高级语言里  i++
sub sub ax,1 不带借位减法指令
sbb sbb dx,1 带借位减法指令
dec dec ax 自减1指令    代表高级语言里 i--
     
     
     
     
     
     
     
整理汇编指令之<逻辑指令>
指令 用法 说明
     
     
     
     

内存空间的区段讲解--------------------------------------------------------

8086 内存空间分配的段表示

B8000H~BFFFFH 32kb空间 dos系统的显存 80*25色彩字符模式的显示器缓冲区

显示器缓冲区分8页, 每页 4kb (≈4000b) +000 ~ +F9F 4000(byte) F9F

1.B8000~B8F9F
2.B8FA0~B9F3F
3.B9F40~BAEDF
4.BAEE0~BBE7F
5.BBE80~BCE1F
6.BCE20~BCEBF
7.BDDC0~BED5F
8.BED60~BFCFF

BFD00 ~ BFFFF ... +0~+2FF ???

在80*25色彩模式下 显示器可显示25行 每行80字符 

偏移 000~09F 为第 1 行 (80字符(word)为160字节(byte))
偏移 0A0~13F 为第 2 行
依次类推 偏移到 F00 ~ F9F 为 25 行

每个字符 有两字节 低字节存储字符 ASCII 码 高字节存储字符属性

每个字符可以有256种属性(背景色,前景色,闪烁,高亮等组合)

0000 0000 = hex:00
7 654 3 210 (8位) 8色
<0>:闪烁 <0 0 0>背景色 0:高亮 <0 0 0>:前景色
<0> <R G B> 0 <R G B>
R:红
G:绿
B:蓝




猜你喜欢

转载自blog.csdn.net/MoGuanXiao/article/details/80710986