请求汇编帮助,--100分送

时间:2021-02-07 03:11:45
DATA SEGMENT
MESS DB‘HELLO','$'
DATA ENDS
CSEG SEGMENT
     ASSUME CS:CSEG,DS:DATA
start:mov ax,DATA;这里传递的是数据还是地址呢?
mov ds,ax;这里为什么要把DATA的数据传到ds里面呢?
。。。。
。。。。
。。。。
CSTA ENDS
end start

14 个解决方案

#1


ASSUME CS:CSEG,DS:DATA
这里不已经初始化了所有的段吗?
下面的mov ds,ax;起什么作用呢?
不解

#2


ASSUME: 告诉汇编程序,程序中的指令或数据位于那个段内
当8086/8088 CPU执行一条需要访问存储器的指令时,要把逻辑地址转换为物理地址。这种转换要知道这次转换使用哪个段寄存器。
ASSUME伪指令就是指示汇编程序已定义的段与段寄存器的对应关系( 即某个逻辑段应通过哪个段寄存器寻址)。
ASSUME伪指令格式为:
ASSUME 段寄存器名:段名,段寄存器名:段名....
源程序中各段要使用的段寄存器必须要用ASSUME指明,以便汇编程序能自动寻址。
在编写源程序时,若语句中的存储器操作数是含有变量或标号的地址表达式,且变量和标号所在的段已由ASSUME设定,则不管是否符合存取类型的隐含规则,都可略去应有的段取代前缀;若ASSUME没有设定,则不能省略应有的前缀。
在一个代码段中,如果没有另外的ASSUME伪指令重新设置,则原有的ASSUME语句的设置一直有效。也就是说,在程序中可随时修改“段寄存器名:段名”的联系。且每一条ASSUME语句不一定设置全部段寄存器,可以只设置部分段寄存器。
ASSUME伪指令不产生任何目标代码。它仅仅告诉汇编程序,下面程序是按照ASSUME语句说明来设置段寄存器的。但是汇编程序不能检查在程序运行期间段寄存器的内容是否与上述Assume语句的设置一致。因为段寄存器的内容是通过程序的办法来进行装入的。

虽然指定了逻辑段,但是没有指定段寄存器的初始值,mov ds,ax就是起这个作用的。

#3


ax中存放的是地址还是数据呢?

#4


那cs等其他段寄存器是否使用的使用也需要赋予初始值呢?

#5


ax 中放的是地址
cs使用的时侯是不能赋初始值的,汇编程序规定的如果赋值会提示错误的。
这是因为dos操作系统再将程序调入内存时才给cs赋初始值。每次用call时也赋初始值。
否则操作系统就会经常死机了。同时dos程序的代码段和数据段是分开的。
如果想看ax中是数据还是地址可以用debug -u -t -d来看,看一下汇编书的附录吧

#6


ax 中放的是地址
一个是逻辑地址,
一个是物理地址

#7


所有的伪指令都不产生汇编代码

#8


那cs为什么不用初始化呢?
还有ss,es使用的时候都需要初始化 吗?

#9


不需要

#10


cs段和ss段不需要送,系统会自动送
而DS和ES段必须初始化

#11


对: xizhouhawk() 说的ax 中放的是地址一个是逻辑地址,一个是物理地址,我表示否定。
ax中放的使逻辑地址,它的物理地址是由逻辑地址转换过来的。(这一步由机器完成)

#12


说的很明白了
我来接分

#13


其他都有分
就你没分

#14


同意

#1


ASSUME CS:CSEG,DS:DATA
这里不已经初始化了所有的段吗?
下面的mov ds,ax;起什么作用呢?
不解

#2


ASSUME: 告诉汇编程序,程序中的指令或数据位于那个段内
当8086/8088 CPU执行一条需要访问存储器的指令时,要把逻辑地址转换为物理地址。这种转换要知道这次转换使用哪个段寄存器。
ASSUME伪指令就是指示汇编程序已定义的段与段寄存器的对应关系( 即某个逻辑段应通过哪个段寄存器寻址)。
ASSUME伪指令格式为:
ASSUME 段寄存器名:段名,段寄存器名:段名....
源程序中各段要使用的段寄存器必须要用ASSUME指明,以便汇编程序能自动寻址。
在编写源程序时,若语句中的存储器操作数是含有变量或标号的地址表达式,且变量和标号所在的段已由ASSUME设定,则不管是否符合存取类型的隐含规则,都可略去应有的段取代前缀;若ASSUME没有设定,则不能省略应有的前缀。
在一个代码段中,如果没有另外的ASSUME伪指令重新设置,则原有的ASSUME语句的设置一直有效。也就是说,在程序中可随时修改“段寄存器名:段名”的联系。且每一条ASSUME语句不一定设置全部段寄存器,可以只设置部分段寄存器。
ASSUME伪指令不产生任何目标代码。它仅仅告诉汇编程序,下面程序是按照ASSUME语句说明来设置段寄存器的。但是汇编程序不能检查在程序运行期间段寄存器的内容是否与上述Assume语句的设置一致。因为段寄存器的内容是通过程序的办法来进行装入的。

虽然指定了逻辑段,但是没有指定段寄存器的初始值,mov ds,ax就是起这个作用的。

#3


ax中存放的是地址还是数据呢?

#4


那cs等其他段寄存器是否使用的使用也需要赋予初始值呢?

#5


ax 中放的是地址
cs使用的时侯是不能赋初始值的,汇编程序规定的如果赋值会提示错误的。
这是因为dos操作系统再将程序调入内存时才给cs赋初始值。每次用call时也赋初始值。
否则操作系统就会经常死机了。同时dos程序的代码段和数据段是分开的。
如果想看ax中是数据还是地址可以用debug -u -t -d来看,看一下汇编书的附录吧

#6


ax 中放的是地址
一个是逻辑地址,
一个是物理地址

#7


所有的伪指令都不产生汇编代码

#8


那cs为什么不用初始化呢?
还有ss,es使用的时候都需要初始化 吗?

#9


不需要

#10


cs段和ss段不需要送,系统会自动送
而DS和ES段必须初始化

#11


对: xizhouhawk() 说的ax 中放的是地址一个是逻辑地址,一个是物理地址,我表示否定。
ax中放的使逻辑地址,它的物理地址是由逻辑地址转换过来的。(这一步由机器完成)

#12


说的很明白了
我来接分

#13


其他都有分
就你没分

#14


同意