如何理解汇编代码的“ DATA移动到DS, STACK移动到SS, TOP移.

作者&投稿:产闵 (若有异议请与网页底部的电邮联系)
~

这几句代码是用于初始化数据区和堆栈区。理解该代码思路如下:

1、了解代码实际操作目的

该段代码实际目的是将DATA移动到DS,将STACK移动到SS,将TOP移动到SP。忽略DATA、STACK的实际含义,先把这两个参数看成存储器内部数据,这一段代码即可以理解为通过通用数据寄存器AX对DS,SS两个个特殊寄存器进行赋值。

注意:以8086指令集为例,由于指令集不提供存储器与存储器或特殊寄存器的直接连接,需要使用AX,BX,CX,DX等寄存器作为中间寄存器。

2、理解DATA,STACK,TOP参数含义

结合程序常有的伪代码内容可以发现DATA,STACK三个参数与DS,SS三个寄存器一一对应,三个参数结合汇编程序编写可以翻译为数据和堆栈。

3、综合理解整段代码

结合以上内容可以大致理解该代码用于实现伪代码的部分映射,即数据区和堆栈区与寄存器的映射。以8086结构为例了解这几个特殊寄存器的功能如下:

DS:数据段段地址寄存器,存放要访问数据的段地址。

SS:堆栈段段地址寄存器,存放堆栈的段地址。

以8086为例内部存储器结构如下图:

综上,该段代码用于初始化数据段和堆栈段,便于后续寻址取数和存数时直接使用偏移地址,提高开发效率。




C#中堆和堆栈有什么不一样?
首先堆栈和堆(托管堆)都在进程的虚拟内存中。(在32位处理器上每个进程的虚拟内存为4GB)堆栈stack 堆栈中存储值类型。堆栈实际上是向下填充,即由高内存地址指向地内存地址填充。堆栈的工作方式是先分配内存的变量后释放(先进后出原则)。堆栈中的变量是从下向上释放,这样就保证了堆栈中先进后出的...

乌兰察布市18335065630: 汇编语言中 mov ds,ax 移动的是ax中的数据还是只是它的一个复制副本? -
乐儿雷米: 对计算机而言,移动即是复制.移动一个文件到其它地方,也是先复制过去,再把原文件删除. mov ds,ax 将ax中的数据赋值给ds,ax中的值不会消失.mov ax,data这句,如果是前面有assume ds:data的情况,是将地址值传给ax. 由于汇编指令...

乌兰察布市18335065630: 如何通俗解释汇编语言中的movs
乐儿雷米: move,翻译就是:移动! 也就是说,把数据,移动到指定位置! 传送也就是移动! 把数据移动到XX地方以后,执行DOS命令,然后再去XX地方看数据的变化,从而得到运行的结果!

乌兰察布市18335065630: 汇编语言偏移地址求解: -
乐儿雷米: DATA SEGMENTBUF1 DB 10H DUP (?) 16字节BUF2 DW 1,1F00H,2500H 6字节STR1 DB 'HELLO' DATA ENDSBUF2的偏移地址是__0010__H; STR1的偏移地址是__0016__H.

乌兰察布市18335065630: 汇编代码解释 -
乐儿雷米: DATA SEGMENT BUFFER DB 05,08,03,04,09,00,06,02,07,01 ;BUFFER数组中保存了个位数字 COUNT DW 10 DATA ENDS STACK SEGMENT PARA STACK 'STACK' DW 20H DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,...

乌兰察布市18335065630: 常见汇编指令求指解释. mov ax Data mov ds ax 是把Data的物理地址还是Data内的数值赋给ds -
乐儿雷米: 1.若Data为段名,则传递的是段地址 2.若Data为符号地址,则传递的是Data内的数值 --------------------------------- 3.PS:若Data为符号地址,但我又想得到它的offset那怎么办?lea ax,Data不知道LZ明白否?

乌兰察布市18335065630: 汇编语言中的代码如何解释,比如我这个例子 -
乐儿雷米: 代码:75H,direct,#data 这个是具体的51单片机编码 机器只识别二进制编码,所有的语言MOV等等最后编译后回变成具体的操作代码,75H就是MOV的操作代码,因为指令很多所以的有一个编码规则,相同的指令MOV也有不同的含义,所有就有不同的编码,88H-8FH,对应访问R0~R7地址,发现它是两字节指令了没?这就是为什么他对应88~8FH,例如 MOV #23,R0 编码后就是 88H,23H MOV #23,R1 编码后就是 89H,23H

乌兰察布市18335065630: 汇编中的.DATA?指令与.DATA指令有什么区别啊?
乐儿雷米: 是伪指令3、数据段定义.DATA / .DATA? / .CONST 作用:说明其下面的内容是数据段中的变量定义.在一个源程序中,可以有多个伪指令.DATA定义的数据段,这就好象在源程序中定义多个同段名的数据段一样.伪指令.DATA?说明下面是一...

乌兰察布市18335065630: 汇编语言中data segment什么意思? -
乐儿雷米: 下面是汇编的基本框架: 定义数据段 就是数据存放的地方 DATA SEGMENT ..... DATA ENDS定义代码段 当然就是要执行的程序代码了CODE SEGMENT START: ........ CODE ENDS END START

乌兰察布市18335065630: 汇编语言assume cs:code,ds:datarea 中的:是什么意思 -
乐儿雷米: 在汇编时其实内部只有偏移地址寻址,而没有变量名寻址. 所以汇编时汇编软件会把你写的变量换成偏移地址.而变量是在你假定的段里查找得到偏移地址.一般指令程序...

乌兰察布市18335065630: 汇编的指令转移习题.谁能该我解释解释啊,题目如下:
乐儿雷米: 我给你解释下吧,在王爽8086汇编中有两条关于 jmp 内存 的指令 分别是:jmp word ptr [bx] 用内存中的数据(一个字,两个字节)修改IP的值 jmp dword ptr [bx] 用内存中的数据(两个字,四个字节)修改cs和IP,高位给cs,低位给IP 要指向第一条指令,也就是从start处开始的那条指令,只要把这条指令的偏移地址放进内存就行了,那么在data段定义的数据就应该是第一条指令的偏移地址,也就是offset start(这是个取偏移地址的指令),在执行了jmp word ptr [bx+1]后 ,就又跳去执行mov ax,dtat

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网