汇编常用寄存器

您所在的位置:网站首页 ir寄存器可见吗 汇编常用寄存器

汇编常用寄存器

2024-07-11 08:54| 来源: 网络整理| 查看: 265

本文索引 一、数据寄存器(AX、BX、CX、DX寄存器)二、变址寄存器(SI寄存器、DI寄存器)三、指针寄存器(BP寄存器、SP寄存器)四、段寄存器(DS寄存器、ES寄存器)

        汇编寄存器主要分两类,通用寄存器和特殊功能寄存器。         通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,保存运算结果。除此之外,它们还各自具有一些特殊功能。通用寄存器的长度取决于机器字长,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。16位cpu通用寄存器共有8个:AX、BX、CX、DX、BP、SP、SI、DI。32位cpu通用寄存器共有8个: EAX、EBX、ECX、EDX、EBP、ESP、ESI、EDI功能和16位CPU差不多。

一、数据寄存器(AX、BX、CX、DX寄存器)

        AX、BX、CX、DX可以称作数据寄存器,这4个16位寄存器又可分别分成高8位(AH、BH、CH、DH)和低8位(AL、BL、CL、DL)。因此它们既可作为4个16位数据寄存器使用,也可作为8个8位数据寄存器使用。在编程时可存放源操作数、目的操作数或运算结果。数据寄存器是存放操作数、运算结果和运算的中间结果,以减少访问存储器的次数,或者存放从存储器读取的数据以及写入存储器的数据的寄存器。

AX(accumulator)累加器。是算术运算的主要寄存器。在乘、除等指令中指定用来存放操作数,以及所有的 I/O指令都使用这一寄存器与外部设备传送信息。BX(base)基址寄存器。常做存放地址使用。CX(count)计数器。常用来保存计数值,如在循环、位移和串处理指令中作隐含计数器。DX(data)数据。一般在作双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来存放高位数。对于某些I/O操作,DX可用来存放I/O的端口地址。

上述寄存器均可用作通用寄存器。

二、变址寄存器(SI寄存器、DI寄存器)

        SI是源变址寄存器,DI是目的变址寄存器。一般用来存放地址偏移,也可以用来存放数据。但需要注意的是:在串处理指令中,SI用作隐含的源串地址,默认在DS中;DI用做隐含的目的串地址,默认在ES中;此时不能混用。

mov ax,1000H mov ds,ax mov si,2 mov ax,[si] ! ds:si = 1000H + 2

即把ds偏移2位置数据取出赋值给ax。

三、指针寄存器(BP寄存器、SP寄存器) SP(stack pointer)堆栈寄存器,SP寄存器存放栈的偏移地址。BP(base pointer)基数指针寄存器BP,它的用途有点特殊,需和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到。比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.

BP作为基址寄存器,一般在函数中用来保存进入函数时的SP的栈顶基址。 每次子函数调用时,系统在开始时都会保存这个两个指针并在函数结束时恢复SP和BP的值。

在函数进入时: push bp !! 保存BP指针 mov bp,sp !! 将SP指针传给BP,此时BP指向SP的基地址。 !! 这个时候,如果该函数有参数,则[bp + 2*4]是该子函数的第一个参数; !! [bp+3*4]是该子函数的第二个参数,以此类推,有多少个参数则[bp+(n-1)*4]。 ..... ..... 函数结束时: mov sp,bp !! 将原sp指针传回给sp pop bp !! 恢复原bp的值。 ret !! 退出子函数 四、段寄存器(DS寄存器、ES寄存器)

        DS(Data Segment)和 ES(Extra Segment)都属于段寄存器,用于存放的就是某个段地址。

下面看一个介绍使用 DS 寄存器的 Demo:

ASSUME CS:CODES CODES SEGMENT START: MOV AX,1000H MOV DS,AX MOV AL,1 MOV BX,0 MOV CX,5 ;设计一个循环,让其循环 5 次 s: MOV [BX],AL ;这里 [BX] = (DS:BX) INC AL INC BX LOOP s MOV AH,4CH INT 21H CODES ENDS END START

上面的代码所做的事情,就是通过循环将 1,2,3,4,5 写入到地址(1000H:0000H)、(1000H:0001H)、(1000H:0002H)、(1000H:0003H)、(1000H:0004H)。

注:CPU不支持直接将立即数送入段寄存器中,如下操作方式不合法:

MOV DS,1000H !! 非法操作


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3