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
View Code

 

其中ret返回地址,push和pop起到恢复寄存器原值的作用。

 

以上是关于8086汇编入门级知识(待补)的主要内容,如果未能解决你的问题,请参考以下文章

8086汇编语言基础学习——8086微机基础

8086汇编语言入门-HelloWorld

8086汇编学习之代码段数据段栈段与段地址寄存器

8086汇编第一部分:基本概念

8086汇编教程之 基础知识

实验三