8086汇编入门级知识(待补)
Posted advancingxq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8086汇编入门级知识(待补)相关的知识,希望对你有一定的参考价值。
考试前一天用汇编写了一个半成品黑白棋,导致本渣只有半小时的复习时间,总结一下用到的知识吧:
1.标志位寄存器(P47)
8086CPU内部有14个16位寄存器。分为3类:
1)通用寄存器:分为数据寄存器(AX,BX,CX,DX)、地址指针寄存器(SP,BP)、变址寄存器(SI,DI)。其中数据寄存器常用,以AX为例,AH为高8位,AL为低八位,可分开使用,其它数据寄存器同理。
2)段寄存器:CS,SS,DS,ES
3)控制寄存器:IP,FLAGS。CPU取指令时总是以CS为段基址,IP为段内偏移地址,取一个指令后,ip自动加1,用户程序不能直接访问ip。
FALGS:常用ZF(对应的是jz,jmp等j族指令的使用)
2.寄存器的寻址方式(P103)
寄存器的寻址方式对应到代码上我感觉就是mov指令使用的问题。
1)立即寻址:形如MOV AX,1111H
2)直接寻址:形如MOV AX,[1111H],其中[1111H]代表以CS(默认是这样,可以段超越)为基址,1111H为偏移地址的操作数。
3)寄存器寻址:形如MOV SI,AX
4)寄存器间接寻址:形如MOV AX,[SI],即通过SI这个第三者存放偏移地址。
5)寄存器相对寻址:形如MOV AX,DATA[BX]
6)基址-变址寻址:形如MOV AX,[BX][SI]
7)基址-变址-相对寻址:形如MOV AX,DATA[BX][SI]
3.word ptr和byte ptr
即poniter,什么时候用,什么时候不用:https://blog.csdn.net/dongfengkuayue/article/details/23829611
以我前天的经验,在cmp及mov指令中是要用的:
mov byte ptr[si+27],2
cmp byte ptr[bx],1
会发现,两个都是带[]的,还是能发现什么的,但CPU发现不了,它蠢。
4.字符串定义(P158)
使用db进行定义,比如hello world!:str db ‘Hello World!‘,0dh,0ah,‘$‘,其中‘$‘是必须要加的,相当于结束符,不然会错。0dh表示回车(意为回到当前文件首位置),0ah表示换行(意为到下一行)。
补充:db定义字节类型占8位,dw定义字类型占16位。
5.子程序设计
call指令,可以实现子程序设计,实现嵌套的功能(相当于函数了,超方便),下面是将AL寄存器的内容按十进制输出到屏幕上的代码:
1 dseg segment 2 base db 10 3 dseg ends 4 cseg segment 5 assume cs:cseg,ds:dseg,es:dseg 6 start: 7 mov ax,dseg 8 mov ds,ax 9 ;调用print_dec 10 call print_dec 11 ;结束 12 print_dec proc 13 push ax 14 mov ah,0 15 div base 16 mov bl,ah 17 18 mov ah,2 19 mov dl,al 20 add dl,48 21 int 21h 22 23 mov ah,2 24 mov dl,bl 25 add dl,48 26 int 21h 27 28 pop ax 29 ret 30 print_dec endp 31 cseg ends 32 end start
其中ret返回地址,push和pop起到恢复寄存器原值的作用。
以上是关于8086汇编入门级知识(待补)的主要内容,如果未能解决你的问题,请参考以下文章