byte-关于汇编段寄存器问题

问题描述

关于汇编段寄存器问题

如图
有注释的那一行。
编译之后却提示错误。
这个错误是指不匹配,也就是CPU不知道传送数据的大小。
但是我已经定义了 byte ptr.
指明了是一个字节。
难道是不能直接对段寄存器传送另外段寄存器的内容吗?
求各位大神解惑
小弟在此感谢不已。
下面是报错图片

解决方案

能用方括号的只能是 BX、BP、SI、DI,[bx+di]是不行的。
汇编不存在自动的“中间变量”,每个值都必须显式的计算好。

时间: 2024-08-03 14:57:14

byte-关于汇编段寄存器问题的相关文章

调试-【汇编】伪指令和段寄存器不是 一 一对应的吗?

问题描述 [汇编]伪指令和段寄存器不是 一 一对应的吗? 比如 assume ds:data , cs:code code segment start : mov ax,1H code ends data segment db '1111' data ends end start :调试的结果是 ![图片说明](http://img.ask.csdn.net/upload/201508/04/1438693132_453028.png) 解决方案 解决方案二: 程序中ds并没有指向data段,你

《操作系统真象还原》——0.12 cs、ds这类sreg段寄存器,位宽是多少

0.12 cs.ds这类sreg段寄存器,位宽是多少 CPU中存在段寄存器是因为其内存是分段访问的,这是设计之初决定的,属于基因里的东西.前面已经介绍过了内存分段访问的方法,这里不再赘述. CPU内部的段寄存器(Segment reg)如下. (1)CS--代码段寄存器(Code Segment Register),其值为代码段的段基值. (2)DS--数据段寄存器(Data Segment Register),其值为数据段的段基值. (3)ES--附加段寄存器(Extra Segment Re

嵌入式 汇编 arm-PC寄存器为什么会是负的?

问题描述 PC寄存器为什么会是负的? 最近在看一个叫Fiasco的微内核源码,遇到一个问题,请大神指点一下.如下是C/C++嵌入式的ARM汇编: L4_INLINE void l4_cache_op_arm_call(unsigned long op, unsigned long start, unsigned long end) { register unsigned long _op __asm__ ("r0") = op; register unsigned long _star

汇编的任务状态段和控制门

每个任务有一个任务状态段TSS,用于保存任务的有关信息,在任务内变换特权级和任务切换时,要用到这些信息.为了控制任务内发生特权级变换的转移,为了控制任务切换,一般要通过控制门进行这些转移.本文将介绍任务状态段和控制门. <一>系统段描述符 系统段是为了实现存储管理机制所使用的一种特别的段.在80386中,有两种系统段:任务状态段TSS和局部描述符表LDT段.用于描述系统段的描述符称为系统段描述符. 1.系统段描述符的格式 系统段描述符的一般格式如下表所示. 系统段 描述符 m+7 m+6 m+

嵌入式-c语言和汇编都可以直接操作寄存器吗?二者有区别吗,怎么看是否能直接操作寄存器

问题描述 c语言和汇编都可以直接操作寄存器吗?二者有区别吗,怎么看是否能直接操作寄存器 图上的意思是C不能直接操作吗?还是说操作起来和汇编不一样 解决方案 可以使用C内嵌汇编来操作! 解决方案二: 你可以搜索一下C语言的编译过程http://www.cnblogs.com/littlehoom/p/3603391.html 解决方案三: 汇编操作寄存器可以用命令去操作,而C可以创建寄存器变量,自然也算是对寄存器的操作,另外C代码可以嵌入汇编代码 解决方案四: 编译过程:c->汇编->机器码 c

汇编中的伪操作

汇编语言程序语句除指令以外还可以由伪操作和宏指令组成.伪操作又称伪指令,它不像机器指令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作,这们可以完成如数据定义.分配存储区.指示程序结束等功能.一.数据定义及存储器分配伪操作这一类伪操作的格式是:[Variable]  Mnemonic Operand,...,Operand[;Comments]其中变量(Variable)字段是可有可无的,它用符号地址表示,其作用与指令语句前的标号相同,但它的后面不跟冒号.

GCC的内嵌汇编语法

1 Overview 开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size.另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能.所以我们必须了解汇编语言,即使你有可能并不喜欢它.     如果我们选择的OS开发工具是GCC以及GAS的话,就必须了解AT&T汇编语言语法,因为GCC/GAS只支持这种汇编语法.  本文只讨论AT&T的汇编语法,以及G

【汇编语言/底层开发】2、CPU的寄存器

寄存器是CPU中用于高速存取暂存数据的存储部件.通过改变寄存器中的数据,可以对CPU的行为进行控制.对于8086CPU,内部共有14个寄存器,位宽均为16位,分别是AX, BX, CX, DX, SI, DI, SP, BP, IP, CS, SS, DS, ES, PSW.不同的寄存器所起到的作用不同. 1.通用寄存器       通用寄存器指的是AX, BX, CX, DX四个寄存器,可以用于存放通用数据.每一个通用寄存器可以存放16位数据,而由于上一代CPU的寄存器为8位,考虑到兼容性,每

汇编 HelloWorld

图灵奖获奖得主,Alan Perlis曾说过:"如果一门语言没有改变你的编程思维,那么它不值得你去学习" 别人学高级语言,但是高级语言会变,我学低级语言,学了永远也不会变! stack segment stack ; 定义堆栈段 db 100 dup(?) ;堆栈段长100字节, 这里db就是字节的意思,如果是用dw就是字,100 dup(?) 中的dup是重复的意思,这句话是重复100遍,一遍定义一个字节,每个字节里全填0 stack ends ; 堆栈段结束 data segmen