AX ,BX ,CX ,DX SI 各种寄存器

本文详细介绍了16位与32位计算机中各种寄存器的功能与用途,包括AX、BX、CX、DX、SI、DI、BP、SP、IP等,并解释了从8位到16位再到32位寄存器的发展历程。

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

AX――累加器(Accumulator),使用频度最高
BX――基址寄存器(Base Register),常存放存储器地址
CX――计数器(Count Register),常作为计数器
DX――数据寄存器(Data Register),存放数据
SI――源变址寄存器(Source Index),常保存存储单元地址
DI――目的变址寄存器(Destination Index),常保存存储单元地址
BP――基址指针寄存器(Base Pointer),表示堆栈区域中的基地址
SP――堆栈指针寄存器(Stack Pointer),指示堆栈区域的栈顶地址
IP――指令指针寄存器(Instruction Pointer),指示要执行指令所在存储单元的地址。IP寄存器是一个专用寄存器。

最早8位机只有a,b等寄存器。

到16位机a,b扩展到16位以后,就把16位叫ax,bx。 高8位叫ah,bh,低8位叫al,bl,其实还是a,b。

到了32位机a,b扩展到32位,又改成eax,ebx。
当然ax,bx继续代表低16位,ah,al,bh,bl,a,b继续维持以前的意义不变。

将下面代码整理成正确格式assemblyORG 0x7C00 ;程序加载到0x7C00处jmp start ;跳转到start标签处message db '21210929zhouhe$' ;要显示的字符串,以$结尾sum dw 0 ;存储总和start: mov ax, 0x0000 ;设置段寄存器 mov ds, ax ;将ds设置为0 mov si, message ;将字符串地址存入si寄存器 mov ah, 0x0E ;设置显示字符的功能号loop_char: mov al, [si] ;将si指向的字符存入al寄存器 cmp al, '$' ;如果是$,表示字符串结束 je display_sum ;跳转到display_sum标签处 add ax, [sum] ; 将内存地址 [sum] 中的值加到 ax 中 add al, [si] ;将al寄存器中的ASCII码值加入总和 mov [sum], ax ; 将 ax 中的值存储回内存地址 [sum] 中 int 0x10 ;调用中断显示字符 inc si ;si寄存器加1,指向下一个字符 jmp loop_char ;跳转到loop_char标签处display_sum: mov ah, 0x0E ;设置显示字符的功能号 mov al, ' ' ;显示一个空格 int 0x10 ;调用中断显示字符 mov ax, [sum] ;将总和存入ax寄存器 mov cx, 0 ;将cx寄存器清零 mov bx, 10 ;将bx寄存器设置为10,用于除法运算 convert_loop: mov dx, 0 ;将dx寄存器清零 div bx ;将ax寄存器中的数除以10,商存入ax,余数存入dx push dx ;将余数存入栈中 inc cx ;将cx寄存器加1 cmp ax, 0 ;如果ax寄存器中的数为0,表示除法运算结束 jne convert_loop ;否则跳转到convert_loop标签处 display_loop: pop dx ;将栈中的数弹出到dx寄存器中 add dl, 48 ;将余数转换为ASCII码 mov ah, 0x0E;设置显示字符的功能号 int 0x10 ;调用中断显示字符 loop display_loop ;循环显示余数 mov dl, '$' ;显示$字符 mov ah, 0x0E int 0x10 jmp $ ;程序结束,跳转到当前位置times 510-($-$$) db 0 ;填充剩余的512字节以符合MBR要求 dw 0xAA55
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值