Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >8086汇编语言之各个通用寄存器的作用

8086汇编语言之各个通用寄存器的作用

作者头像
乱码三千
发布于 2021-08-24 07:13:35
发布于 2021-08-24 07:13:35
1.2K00
代码可运行
举报
文章被收录于专栏:乱码三千乱码三千
运行总次数:0
代码可运行

在8086cpu通用寄存器

  • 寄存器AX: 用于存放数据 (源代码编写时不能以字母开头,可在开头补上0)
    • 比如 mov ax, ffffh 应该写成 mov ax, 0ffffh 否则编译报错
  • 寄存器BX: 另外还用于存放数据段偏移地址 初始值为源代码大小
  • 寄存器CX: 另外还用于存放loop循环计数
  • 寄存器DX: 另外还用于存放累加结果
  • 寄存器EX:备用寄存器

BX存在的意义

1. asm编译器无法识别中括号,mov ax,[0]编译时会默认去除中括号.使用bx替代可以解决这个问题,如果在debug模式下使用-a命令输入中括号则没有问题,可以正常识别

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
;错误写法:编译器无法识别[0],会直接取值为0 而不是偏移地址0所对应的内容
assumme cs:code
code segment
	mov ax,2000h
	mov ds,ax
	mov al,[0]
	mov bl,[1]
	mov cl,[2]
	mov dl,[3]
	
	mov ax,4c00h
	int 21h
code ends
end

问题: 那如果非要以带中括号的方式进行编写可以吗? 答案是:需要带上段地址ds,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assumme cs:code
code segment
	mov ax,2000h
	mov ds,ax
	mov al,ds:[0] ;其中ds称作段前缀
	mov bl,ds:[1]
	mov cl,ds:[2]
	mov dl,ds:[3]
	
	mov ax,4c00h
	int 21h
code ends
end
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乱码三千 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
汇编语言_汇编语言程序
开头和结尾的两句代表伪指令 只有编译器可以读懂 汇编指令可以被翻译为机器码最终被cpu执行 汇编程序 就是包含汇编指令和伪指令的文本 mov ax,4c00h int 21h 跟C语言程序的return 0一样 返回控制权 一个汇编程序是由多个段组成的 这些段被用作各种空间来使用 一个有意义的汇编程序至少需要一个段 且每个段都需要段名 段名 segment--段的开始 段名 ends--段的结束 assume假设 含义是假设某一段寄存器和程序中我们定义的段名关联起来 可以理解为和变量的引用一个意思
用户7272142
2023/11/14
4300
汇编语言_汇编语言程序
【汇编语言】[BX]和loop指令(三)—— Debug与masm的指令处理差异与loop,[bx]的联合应用
但是在汇编源程序中,指令“mov ax,[0]”被编译器当作指令“mov ax,0”处理。
Crossoads
2024/11/13
1350
【汇编语言】[BX]和loop指令(三)—— Debug与masm的指令处理差异与loop,[bx]的联合应用
(五)汇编语言——[bx]和loop指令
目录 [...]与(...) [...] (...) idata Loop指令 段前缀 总结 ---- [...]与(...) [...]         这个我们其实见过,代表的是一个内存单元,段地址在DS中,偏移地址就是[bx]。 (...)         这个是表示一个内存单元或寄存器中的内容,但是千万要注意,这个是人为规定的,不是汇编语法,上面那个是汇编语法。         比如:movax,[2],这个指令,用()来表示就是:(ax)=((ds)*16+2)。 idata
小点点
2022/12/28
6530
(五)汇编语言——[bx]和loop指令
【汇编】(六)[BX] 和 Loop 指令
我们要完整地描述一个内存单元,需要两种信息: (1)内存单元的地址; (2)内存单元的长度(类型);
sidiot
2023/08/31
3230
【汇编】(六)[BX] 和 Loop 指令
汇编语言第三版答案(王爽)
汇编语言答案(王爽)  此文只是用来存个档,不喜勿喷 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。 (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。 (3)1KB的存储器可以存储 8192(2^13) 个bit, 1024个Byte。 (4)1GB是 1073741824 (2^30) 个Byte、1MB是 1048576(2^20) 个Byte、1KB是 1024(2^10)个Byte。 (5)8080、8088、80296、80
Angel_Kitty
2018/04/17
2.5K0
汇编基础
​ cup与所有内存之间:地址总线,数据总线,控制总线,每条线对应不同信息,指令与数据分开
Dean0731
2020/08/17
1.5K0
【汇编语言】[BX]和loop指令(四)—— 汇编语言中的段前缀与内存保护:原理与应用解析
指令“mov ax,[bx]”中,内存单元的偏移地址由bx给出,而段地址默认在 ds中。我们可以在访问内存单元的指令中显式地给出内存单元的段地址所在的段寄存器。比如:
Crossoads
2024/11/13
1540
【汇编语言】[BX]和loop指令(四)—— 汇编语言中的段前缀与内存保护:原理与应用解析
8086汇编语言——操作内存中的数据
;编程计算0000h:0000h内存单元中数据乘以3的结果,结果保存在dx中。 ;本次计算的一个字节单元中的数据,它是8位的。所以需要使用8位的寄存器取值。 ;这个内存单元中的数据最大可能是255,255×3的结果会超出8位,所以运算的时候,需采用16位寄存器。 ;当然,最终结果也要保存在16位寄存器之中。 assume cs:code code segment mov ax,0000h mov ds,ax ;段地址 mov bx,0000h
zy010101
2020/10/10
1.2K0
8086汇编语言——操作内存中的数据
x86汇编语言之8086语法和指令集
上面使用db或者dw定义数据的方式,定义数据的同时就已经定义好了数据所在的物理地址, 如果我们想要从指定的内存地址中写入或者读取数据的话,需要借助段寄存器来实现 在8086中给我们提供了DS SS CS ES四个寄存器,理论上你使用哪一个都行,但是由于系统默认读取DS寄存器中的数据当做段地址,所以我们一般使用DS进行数据的段地址管理
乱码三千
2021/08/24
2.7K0
8086汇编语言——交换寄存器中的内容
;交换ax和bx中的值 assume cs:code ;假设cs的值是code code segment ;定义一个段的开始 mov ax,2000h mov ss,ax mov sp,0 add sp,10 ;在Debug中跟踪执行,可以看到mov ss,ax和mov sp,0是必须一起执行的,不能打断。 mov ax,1 ;初始化ax和bx mov bx,2 push ax
zy010101
2020/10/10
9960
8086汇编语言——交换寄存器中的内容
8086汇编语言——使用数据段和栈段
;编写程序将data1段和data2段中的字节型数据依次相加,将结果存在data3段中。 ;ds保存data1的段地址,es保存data2的段地址,ss保存data3的段地址。 ;db用来定义字节型数据,这里定义了5个连续的字节型数据。 assume cs:code data1 segment db 1,2,3,4,5 data1 ends data2 segment db 6,7,8,9,10 data2 ends data3 segment db 0,0,0
zy010101
2020/10/10
2.4K0
8086汇编语言——使用数据段和栈段
【汇编】(二)寄存器(CPU工作原理)
8086CPU 有14个寄存器,名称分别为: AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW
sidiot
2023/08/31
6850
【汇编】(二)寄存器(CPU工作原理)
王爽汇编语言实验16
代码写完之后发现结果不对,调试一下发现问题出在int7c的中断例程中 call word ptr table[bx] 这一句。 程序首先进行编译,这时候table实际上就被替换为了一个地址,然后再执行程序的时候,这个错误的地址和程序一块被拷贝到了0:200开始的内存中,所以执行程序的时候会出问题。 要解决这个问题需要在要拷贝的程序前添加一句 org 200h,告诉编译器,在编译的时候就把后面这段程序当做存在0:200处,这样一些标号的地址就是我们想要的正确地址。
yifei_
2022/11/14
3810
汇编语言_访问寄存器和内存
运算器进行信息处理 寄存器进行数据的存储 控制器协调各种器件进行工作 寄存器是CPU内存信息存储单元
用户7272142
2023/11/10
3140
汇编语言_访问寄存器和内存
【汇编语言】[BX]和loop指令(一)—— 初识[BX]和loop指令
和[0]有些类似,[0]表示内存单元,它的偏移地址是0。比如在下面的指令中(但是注意这个是在 Debug 中使用的方式):
Crossoads
2024/11/13
9320
【汇编语言】[BX]和loop指令(一)—— 初识[BX]和loop指令
【汇编语言】直接定址表(一)—— 「从单元标号到跨段数据:解锁汇编语言的隐藏技巧」
比如:下面的程序将code 段中的a标号处的8个数据累加,结果存储到b标号处的字中。
Crossoads
2025/01/20
2100
8086汇编语言——双层循环的使用
;编程,将data段的每个单词的前四个字母改写为大写。 assume cs:code stack segment dw 10 dup(10) stack ends data segment db '1. display ' db '2. brows ' db '3. replace ' db '4. modify ' data ends code segment start: mov ax,stack m
zy010101
2020/10/10
1.2K0
8086汇编语言——双层循环的使用
8086汇编语言——处理字符串
;将'basic'转成大写'BASIC' ;将'ASM'转成小写'asm' assume cs:code data segment db 'basic' db 'ASM' data ends code segment start: mov ax,data mov ds,ax ;设置ds指向data mov bx,0 ;设置偏移地址 mov cx,5 ;循环5次 s1: mov al,[bx]
zy010101
2020/10/10
8760
8086汇编语言——处理字符串
【汇编语言】[BX]和loop指令(二)——在Debug中跟踪用loop指令实现的循环程序
ffff:0006 单元中的数是一个字节型的数据,范围在0-255之间,则用它和3相乘结果不会大于65535,可以在dx中存放下。
Crossoads
2024/11/13
1890
【汇编语言】[BX]和loop指令(二)——在Debug中跟踪用loop指令实现的循环程序
【汇编】(四)寄存器(内存访问)
问题: (1)0地址单元中存放的字节型数据是多少? 20H (2)0地址字单元中存放的字型数据是多少? 4E20H (3)2地址单元中存放的字节型数据是多少? 12H (4)2地址字单元中存放的字型数据是多少? 0012H (5)1地址字单元中存放的字型数据是多少? 124EH
sidiot
2023/08/31
4340
【汇编】(四)寄存器(内存访问)
推荐阅读
相关推荐
汇编语言_汇编语言程序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验