汇编基础

来源:互联网 发布:易达工程造价软件 编辑:程序博客网 时间:2024/05/01 09:06

8086寄存器

8086 CPU 中寄存器总共为 14 个,且均为 16 位

通用寄存器:

AX,BX,CX,DX 称作为数据寄存器:

  • AX (Accumulator):累加寄存器,也称之为累加器;
  • BX (Base):基地址寄存器;
  • CX (Count):计数器寄存器;
  • DX (Data):数据寄存器

AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;
BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;
CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;
DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器;

SP 和 BP 又称作为指针寄存器:

  • SP (Stack Pointer):堆栈指针寄存器;
  • BP (Base Pointer):基指针寄存器;

SI 和 DI 又称作为变址寄存器:

  • SI (Source Index):源变址寄存器;
  • DI (Destination Index):目的变址寄存器;

控制寄存器:

  • IP (Instruction Pointer):指令指针寄存器;
  • FLAG:标志寄存器;

段寄存器:
* CS (Code Segment):代码段寄存器;
* DS (Data Segment):数据段寄存器;
* SS (Stack Segment):堆栈段寄存器;
* ES (Extra Segment):附加段寄存器;

8086寻址方式

一条指令 包括 操作码操作数

  • 操作码:表示指令执行什么操作,如mov,add,sub等等

  • 操作数:参加操作的数或数的存放地址(寄存器,各种地址表示格式)

寻找操作数存放的地址称为寻址方式(也可以数,用什么存储了操作数的地址)

  • 一、立即寻址方式 MOV AL,06H

  • 二、寄存器寻址方式 MOV BX,AX

  • 三、直接寻址方式

MOV BX, DS:[2000H]操作数存放在存储器中, 偏移量直接写在操作数中,.地址为数据段寄存器DS的值* 16 (<<4)然后加上直接给出的偏移量2000H.
  • 四、寄存器间接寻址方式
操作数存放在存储器中, 16位偏移地址存放在SI, DI, BP, BX四个寄存器之一中.若使用BX, SI, DI之一作为寄存器, 操作数默认放在DS所决定的数据段中.即地址为:DS *16 + BX示例:MOV AX, [SI] ; 将DS*16 + SI中的值放入AX中若使用BP做间接寻址, 操作数默认放在SS决定的堆栈段中.示例:MOV AX, [BP]  ;将SS*16 + BP中的值放入AX中可以直接指定使用的段寄存器:MOV  AX, SS:[SI]  ;将SS*16 + SI中的值放入AX
  • 五、寄存器相对寻址方式
操作数存放在存储器中, 使用段寄存器内容* 16 加SI, DI, BP, BX四个寄存器之一的内容再加直接给出的位移量.若使用BX, SI, DI之一作为寄存器, 操作数默认放在DS所决定的数据段中; 若使用BP做间接寻址, 操作数默认放在SS决定的堆栈段中.与寄存器间接寻址相比只是增加了直接给出的偏移量:示例:MOV AX, [SI-2] ; 将 DS*16 + SI - 2中的值放入AXMOV AX, [BP+4]  ;将 SS*16 + BP + 4中的值放入AXMOV  AX, SS:[SI-8]  ;将 SS*16 + SI - 8中的值放入AX
  • 六、基址变址寻址方式
将段地址寄存器的值*16加上基址寄存器(BX,BP)之一的地址加上变址寄存器(SI, DI)之一的值作为地址.若使用BX作基址 操作数默认放在DS所决定的数据段中; 若使用BP做基址, 操作数默认放在SS决定的堆栈段中.示例:MOV AX, [BX][SI] ; 将 DS*16 +BX + SI中的值放入AX中MOV AX, [BP][DI]  ;将 SS*16 + BP + DI 中的值放入AX中MOV  AX SS:[Bx][SI]  ;将 SS*16 + BX + SI 中的值放入AX中
  • 七、相对基址变址寻址方式
在基址变址寻址基础上再加一个直接给出的偏移量:示例:MOV AX, 1234H[BX][DI] ;将DS * 16 + BX + DI + 1234H中的值放入AX中.还有几种表示方法与上式等价:MOV AX, [BX+DI+1234H]MOV AX, 1234H[BX+DI]MOV AX, 1234H[BX][DI]

参考
http://www.cnblogs.com/Finley/p/5573477.html

汇编语言基础

伪指令
http://blog.csdn.net/grow_mature/article/details/8535586

.section指示把代码划分成若干个段(Section),程序被操作系统加载执行时,每个段被加载到不同的地址,操作系统对不同的页面设置不同的读、写、执行权限。

.data段保存程序的数据,是可读可写的,相当于C程序的全局变量。

.text段保存代码,是只读和可执行的

BIOS中断

http://blog.csdn.net/jxfgh/article/details/5521861

中断服务
中断服务的功能号

  • 输出字符,汇编代码1
DATAS SEGMENT    ;此处输入数据段代码DATAS ENDSSTACKS SEGMENT    ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    MOV AX,DATAS ; data段装入DS    MOV DS,AX    mov bh, 0    ;第xx页      mov dh, 2    ;第xxx行      mov dl, 10   ;第xx列    mov ah, 2    ; int 10h,2号功能(设置光标位置)       int 10h      MOV bl, 2CH     ;绿底红色的字符    mov al, 'a'     ; ASCII字符    mov cx, 02H     ;显示的数量    mov ah, 09H     ; int 10h,9号功能(显示字符)    int 10H    MOV AH,4CH ;返回DOS,一般用于汇编程序的结束    INT 21HCODES ENDS    END START

这里写图片描述

  • 输出字符串,汇编2
DATAS SEGMENT    ;此处输入数据段代码    msg db 'hello world', 0DATAS ENDSSTACKS SEGMENT    ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    MOV AX,DATAS ; data段装入DS    MOV DS,AX    ; 设置初始的光标位置,此后每输出一个字符,光标往右移    mov bh, 0    ;第xx页      mov dh, 2    ;第xxx行      mov dl, 10   ;第xx列    mov ah, 2    ; int 10h,2号功能(设置光标位置)       int 10h      mov bx,offset msg   ;字符串首偏移地址放到bx中    ;lea SI,msgnext:    mov al, [bx]    ;[DS*16 + bx] 寄存器相对寻址    cmp al, 0       jz exit    push bx ; 利用栈暂存bx    mov cx, 1    mov bl, 1EH           ;蓝色背景、黄色字符.    mov ah, 09H     ; int 10h,9号功能(显示)    int 10H    inc dx ; 光标(dx, dl)加    mov ah, 2       int 10h      pop bx ; 弹出栈里面的bx,恢复数据    inc bx    jmp nextexit:        MOV AH,4CH ;返回DOS,一般用于汇编程序的结束    INT 21HCODES ENDS    END START

这里写图片描述

汇编代码3

DATAS SEGMENT    ;此处输入数据段代码    msg db 'hello world','$'    msg2 db '--abc--','$' DATAS ENDSSTACKS SEGMENT    ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    MOV AX,DATAS ; data段装入DS    MOV DS,AX    ;DS:msg 是字符串的首地址     mov dx,offset msg      ; int 219号功能,显示字符串    mov ah, 09H    int 21h    mov dx,offset msg2     mov ah, 09H    int 21h    MOV AH,4CH ;返回DOS,一般用于汇编程序的结束    INT 21HCODES ENDS    END START

这里写图片描述


原创粉丝点击