汇编中的数据存放问题 mov ax ,data ax中到底是什么
这句话的作用就是使DS的值为DATA.其中DATA为你定义的数据段,它的作用就是把数据段寄存器DS的值赋为DATA,就是让数据段指向正确的位置
data赋给AX只是起一个过渡作用,实际上是为了将值赋给DS
DATA指DATA做的地址,应该是随机分配的
将AX的值赋给DS是一个过渡作用
扩展资料:
语言组成
由于汇编指令系统庞大,因而需构建指令系统体系,其指令数量庞大,格式复杂,可记忆性差等。指令中最难的是指令所支持的寻址方式,其实质就是指令中操作数如何获取。对于处理器而言,就是如何找到他所需的数据。
但对于计算机底层的汇编语言而言,这种寻址方式将涉及大量的计算存储格式,与 复杂的存储管理方式紧密相关,因而难以理解。最后,汇编指令还关系到如何影响标志位,但处理器标志位非常复杂,因而对其机制掌握就比较困难。
传送指令
包括通用数据传送指令MOV、条件传送指令CMOVcc、堆栈操作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交换指令XCHG/XLAT/BSWAP、地址或段描述符选择子传送指令LEA/LDS/LES/LFS/LGS/LSS等。
逻辑运算
这部分指令用于执行算术和逻辑运算,包括加法指令ADD/ADC、减法指令SUB/SBB、加一指令INC、减一指令DEC
比较操作指令CMP、乘法指令MUL/IMUL、除法指令DIV/IDIV、符号扩展指令CBW/CWDE/CDQE、十进制调整指令DAA/DAS/AAA/AAS、逻辑运算指令NOT/AND/OR/XOR/TEST等。
移位指令
这部分指令用于将寄存器或内存操作数移动指定的次数。包括逻辑左移指令SHL、逻辑右移指令SHR、算术左移指令SAL、算术右移指令SAR、循环左移指令ROL、循环右移指令ROR等。
位操作
这部分指令包括位测试指令BT、位测试并置位指令BTS、位测试并复位指令BTR、位测试并取反指令BTC、位向前扫描指令BSF、位向后扫描指令BSR等。
控制转移
这部分包括无条件转移指令JMP、条件转移指令Jcc/JCXZ、循环指令LOOP/LOOPE/LOOPNE、过程调用指令CALL、子过程返回指令RET、中断指令INTn、INT3、INTO、IRET等。
串操作
这部分指令用于对数据串进行操作,包括串传送指令MOVS、串比较指令CMPS、串扫描指令SCANS、串加载指令LODS、串保存指令STOS,这些指令可以有选择地使用REP/REPE/REPZ/REPNE和REPNZ的前缀以连续操作。
输入输出
这部分指令用于同外围设备交换数据,包括端口输入指令IN/INS、端口输出指令OUT/OUTS
参考资料来源:百度百科-汇编语言
mov ax,dataseg 是将标识为dataseg的数据区首地址传给ax
mov ds,ax 寄存器赋值。因为8068/8088规定段寄存器不能直接赋值,必须要由寄存器给他传值,因此想初始化数据段首地址必须要由ax中转一下。
dw 32 dup(0)告诉编译器内存中预留32个4字节,并全部填充为0
data segment
.........
data ends
这里的data只是一个名字。你可以随便换名字,比如:
dseg segment
.....
dseg ends
段地址是16位,所以不能放到al中,要放到16位寄存器ax里。像上面这么定义,就该写成:
mov ax, dseg
mov ds, ax了。
用汇编语言写的程序,通常,要编写一个逻辑段,用来存放数据。
这个段的名称,往往命名为:DATA。
程序,在内存执行的时候,首先,就应该把“数据段的起始地址”写入“段寄存器 DS"。
MOV AX,DATA
MOV DS,AX
这两条指令,就是干这个的。
执行了这两条之后,后边的程序,才能使用该数据段中的内容。
----------------
当然,编写程序时,数据段,你也可以使用别的“段名称”。
而且,你也可能,并不需要数据段。
那么,DS,应该写入什么,你自己确定吧。
编程题:设数据段中有若干个有符号字节数据,请编程将其中的负数与正数分...
;算法介绍:由于正负数的叛法主要是看最高位即符号位,,而由于是字节型数据,所以可以用TEST指令将操作数与10000000B来判断是正是负,,最后利用循环一次性搞完,,,;程序例如下:DATA SEGMENT NUM EQU 100 DATASTR DB NUM DUP(?)MINUS DB 100 DUP(?)PLUS DB 100 DUP(?)DATA ENDS CODE SE...
请教c语言高手,在做数据结构中遇到了一个内存的问题,请教。
如果你程序中有指针的话,请检查你的指针是否都指向了我们期望的内存单元。如果你做的是链表或者二叉树等。看看有没有没初始化的指针。在链表尾部或者二叉树的叶子节点中的指针是否没有改成NULL。根据错误提示,是你写了一个不该写的内存单元,请检查程序赋值语句。
java不同的对象在内存中保存的位置
堆可以一句话概括,装new出来的东西!所以综上所述,基本数据类型都在stack中,而引用类型,变量是放在stack中,真正有内容的东西放在heap中,也就是当new了一个新的引用类型,他就会放在堆中,同时栈中的引用类型变量会指向堆中你new出来的东西!这样说希望能帮你了解到java的内存分配问题。
C#winform程序中利用dsoframer控件显示和存储数据到sql数据库的问题
$_FILES['FileData']['tmp_name'],$_FILES['FileData']['name']);docpath=$filepath.$_FILES['FileData']['name'];data=file_get_contents($docpath);f=fopen("D:\/wamp\/www\/word\/text.txt",'w');fwrite($f,$data);fclose($f);?> 呵呵,我花了很久的时间才解决同样的问题 ...
...WORD和INT、DW和DI有什么区别,求详解数据类型?感觉有点模糊_百度...
1、储存数据不同。WORD和INT都指16位数据。WORD通常侧重于数据存储区域和带符号数据的长度,只有16位长度。INT主要关注整数数据类型(无符号)。在PLC中它指的是16位数据的类型,但在C语言中它可以是32位。2、储存地址长度不同。DW是对两字存储地址长度的描述,它可以存储32位数据,即两个字的数据存储...
buffer是什么意思?
缓冲区是一个存储数据的临时空间。它可以在硬件或软件中找到。当数据从一个地方转移到另一个地方时,缓冲区可以用来暂时存放这些数据,以便进行后续处理或格式化。二、缓冲区的功能 缓冲区的主要功能是临时存储数据,以提高处理效率。例如,在文件传输过程中,缓冲区可以暂时存储从硬盘读取的数据,然后逐步...
本科设计的一个题目:有许多数据,存储在分散的数据库中,这些数据存在冗 ...
天朝的题目永远都是则么荒唐,无论是中学作文还是大学的毕业设计!这种"分散存储"应用的非常广泛,而且的确存在非常大的冗余.但是这个是从实际中发展过来的,有其存在的意义.从某种角度说,这个是一种处理数据的方案,是指一种技术而存在的. 闲话不说了 以mssql为例,针对这种情况,server1和service2的Dat...
matlab程序编写中N个循环,循环一次保存一次数据,在进行下一次循环_百 ...
可以定义一个空向量,循环中每一次计算把结果加到向量末尾(或者头部),就像链表操作一样。这样每一次循环中的结果就都被存下来了。给出示例代码如下:clc;clear;a=[];%定义空矢量 for i=1:5 t=2^i;%循环中每次计算2^i a=[a t];%计算结果每次都加到a的末端 end a 运行结果如下:a = ...
...因0X0000102的错误状态而无法将请求的数据放如内存
假如是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,就要检查是不 是内存出问题了或者和其它硬件不兼容。 软件方面: 先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间, 就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当放入两斤的...
"0x00f20015"指令引用的"0x00000030"内存,该内存不能为"read"
假如是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,就要检查是不是内存出问题了或者和其它硬件不兼容。 软件方面: 先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当放入两斤的水...
镡勤头孢: mov ax,11在ax寄存器中不是以ASCII码形式存放的,在这里的1就是一个数字,用2进制表示就是0000 0000 0000 0001,如果要以ASCII存放,你可以直接把1的ASCII码49直接送入ax寄存器中mov ax,49.字符串或者字符在内存中是以ASCII码格式存放的
萧县18420706465: 汇编语言错误 mov ax,es:[bx] - ?
镡勤头孢: 在DEBUG中,段超越前缀要作为单独一行输入.如,-a 0AF1:0100 es: 0AF1:0101 mov ax,[bx] 0AF1:0103 ds: 0AF1:0104 mov ax,[bx] 0AF1:0106 mov ax,[bx] 0AF1:0108 -q
萧县18420706465: 请问汇编语言中 mov ax,[1] 什么意思 ax = 1000 - ?
镡勤头孢: MOV AX, [1] 是直接寻址. 将偏移地址为0001、0002的内存单元二个字节送入AX, (内存单元物理地址=段地址x16h +偏移地址)
萧县18420706465: 汇编语言MOV指令问题 - ?
镡勤头孢: MOV A,41H 是把41H送入A中,如果要把56H送入A,要在41上加方括号,即MOV A,[41] 但MOV 指令不能同时两个操作数为存储器,变量A其实也是存储器,所以,MOV A,[41]是错误的,MOV 41H,32H 41H 是立即数,不能被赋值,如果是存储地址要加[],MOV 42H,A 同上,所以,以上三条指令根本不可能执行,通不过编译.
萧县18420706465: 在汇编语言中..mov ax,10h为何说数据存放在代码段呢 什么样的情况会放在代码段 什么情况会放在数据段 - ?
镡勤头孢: 例如:DATA SEGMENT A DW 123; …… DATA ENDS
萧县18420706465: 汇编问题 MOV AX,[SI][DI] 与 MOV BP,AX 的对错 为什么 - ?
镡勤头孢: MOV AX,[SI][DI] SI和DI都是变址寄存器,没有变址+变址这样的寻址方式的,所以是错的,只有变址+基址寻址方式 MOV BP,AX,BP是堆栈指针寄存器,用于指向栈顶的位置.不能作为寄存器使用,它的功能被BX代替
萧县18420706465: mov AX,[SI] 和 MOV [SI],AX 各自什么意思,有什么区别,假设DS=2000H,SI=1234H - ?
镡勤头孢: “mov AX,[SI]”表示把寄存器SI所指内存单位的字传送到寄存器AX中,“MOV [SI],AX”表示把寄存器AX中的字传送到寄存器SI所指内存单位.MOV 指令将源操作数复制到目的操作数.作为数据传送(data transfer)指令,它几乎用在所有程序...
萧县18420706465: 汇编语言中, mov ax,ES:[0]是什么意思? - ?
镡勤头孢: 规范的写,应该是MOV BH,0 MOV 是英文MOVE的助记简写,代表“移动”的含义 BH是CPU中的一个寄存器BX(16位)的高八位,其中B是BX的缩写,H是HIGHT的缩写 注意,其中所说的寄存器实际和我们常见的内存很想死,只不过位置在CPU内,速度很快
萧县18420706465: 关于汇编语言MOV指令的问题? - ?
镡勤头孢: MOV AX,DS是把数据段的段地址取到AX中,后面应该有把AX再送其他段寄存器,这样,指向同一段地址.MOV AH,DS,这是错误指令,AH是八位的,不能送十六位的数.MOV DS,AX 把AX里面的数据赋到DS,前面应该有取段地址给AX,经过AX初始化DS.
萧县18420706465: 汇编语言中MOV RESULT[DI],ax 什么意思 - ?
镡勤头孢: 1. MOV RESULT[DI], AX 这一条指令的操作是将AX的内容存放到内存中,内存偏移地址是RESULT的地址再加DI的数值.举例:设RESULT地址是300,DI中的数值是15,那么AX的的内容将被存入315单元中.2.LEA DI, RESULT MOV [DI], AX 这两条指令的操作结果,与上面是不同的.第一条LEA指令是将RESULT的偏移地址存入DI.用上面的例子,这条指令执行完以后,DI的内容变成了300.再执行第二条MOV指令时,是将AX的内容存放到内存中,内存偏移地址就是DI的值300.