boos

本文详细介绍了8086处理器上的寄存器使用规则,特别是用于提供偏移地址的BX、SI、DI、BP寄存器。同时列举了各寄存器的功能及其在32位、16位及8位下的表现形式,并给出了具体的寄存器操作实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在8086处理器上,如果要用寄存器来提供偏移地址,只能使用BX,SI,DI,BP。

段寄存器:BX
段寄存器:SI
段寄存器:DI
段寄存器:BP

不能使用其他寄存器,比如SP、IP、AX、CX、DX。
这是一种硬性规定,说不上有什么特别的理由。

而且在设计8086处理器时,每个寄存器都有自己的特殊用途。

 32位 16位8位寄存器
 EAX AX=累加器AH AL
 ECX CX=计数器CH CL
 EDX DX=数据寄存器DH DL
 EBX BX=DS段的数据偏移地址BH BL
 ESP SP=栈顶指针 
 EBP BP=栈底指针 
 ESI SI=复制内存原始地址(movsb movsw) 
 EDI DI=复制内存目标地址(movsb movsw) 

 

 

 32位 16位8位寄存器
 EAX AXAH AL
 ECX CXCH CL
 EDX DX DH DL
 EBX BX BH BL
 ESP SP 
 EBP BP 
 ESI  SI 
 EDI DI 


设计这些寄存器的人,希望我们能够按照不同的用途去使用它们。

inc  r8/r16/m8/m16
sub


123    除以 10  =12 余数为3
12    除以 10  =1 余数为2
1      除以 10  =0  余数为1

 


 

;两个数相加 计算结果输出到屏幕上。

;cs:0000 :ip:7c00 =07c00
;cs:07c0 :ip:0000 =07c00

jmp near mycode

number1:
dw 125

number2:
dw 200

;325 / 10 = 32  余数 5
;32 /  10 = 3 余数2
;3 /   10 = 0 余数3
;0 /   10 =0  余数为0
;0 /   10 =0  余数为0

mydata:
db 'R',0x7,'e',0x7,'s',0x7,'u',0x7,'l',0x7,'t',0x7,':',0x7

result:
db  0,0x7,0,0x7,0,0x7,0,0x7,0,0x7;因为十六位最大是ffff=65535,所以要五位

mycode:
mov ax,0x07c0
mov ds,ax ;初始化数据段寄存器

mov ax,0xb800
mov es,ax ;初始化显存段寄存器


;计算两个数相加之和
mov bx,number1
mov ax,word [ds:bx]
mov bx,number2
add ax,word [ds:bx]

mov sp,10 ;被除数
mov cx,5
mov bx,result+8

calc:
mov dx,0  ; dx:ax / 16位寄存器
div sp;dx:ax / sp = 商在AX中,余数在DX中。
add dl,0x30
mov byte [ds:bx],dl
sub bx,2
loop calc 

show:
mov cx,(mycode-mydata)/2
mov di,0
mov si,mydata

rep movsw
;movs word   es:di  ds:si


stop: jmp near stop
times 510-($-$$) db 0
dw 0xAA55

转载于:https://www.cnblogs.com/xiaodaxiaonao/p/7158749.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值