经过ASSUME DS:DATAS之后,DS的内容就已经是名为“DATAS”的数据段之段地址了吗?

经过ASSUME DS:DATAS之后,DS的内容就已经是名为“DATAS”的数据段之段地址了吗?那为什么程序中还经常看到下面的语句?
mov AX,DATAS
mov DS,AX

ASSUME DS:DATAS,将段寄存器DS分配给DATAS段使用,即,DS的内容就是DATAS的段地址。
若同一程序已有了ASSUME DS:DATAS,则后续的MOV AX,DATAS/MOV DS,AX两指令多余。
但是,若未用ASSUME伪指令将DS分配给DATAS,则后续MOV AX,DATAS/MOV DS,AX不多余。
例如,以下程序中,MOV AX,DATAS/MOV DS,AX两指令有特定不多余,有编程者的某种用处:
ASSUME CS:CODES,CS:DATAS
DATAS SEGMENT
DB 01H, 02H, 03H
DATAS ENDS
CODES SEGMENT
ORG 100H
START: ……
MOV AX,DATAS
MOV DS,AX
……
CODES ENDS
END START来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
无其他回答

ASSUME DS:DATAS 有了这条语句,DS里面的值就是DATAS的值了吗?求详解...
ASSUME DS:DATAS 是段寄存器分配伪指令,意思是:寄存器DS的内容,是名为“DATAS”的数据段之段地址,不是DATAS的值。

DATAS SEGMENT是什么
在程序执行过程中,通过ASSUME伪指令,CS:CODES和DS:DATAS被指定为代码段和数据段的默认段寄存器。程序从START指令开始,首先使用MOV AX,DATAS获取数据段地址,然后通过MOV DS,AX将地址加载到DS寄存器中,确保数据段的正确引用。使用LEA DX,STRING指令将STRING的地址送入DX,使其指向要显示的字符串。接下...

解释下面一个汇编程序每一行代码的意思功能.
ASSUME CS:CODES,DS:DATAS ;利用ASSUME伪指令指定某个段分配给哪一个寄存器,它并没有把段地址装入段寄存器,所以一般在代码段开始处,还必须把段地址装入相应的段寄存器(如DS)中。但是代码段和堆栈段不需要这样,CS、SS是由系统负责设置的 START:MOV AX,DATAS ;取段地址送入AX MOV DS,AX ;把段...

解释下面一个汇编程序每一行代码的意思功能.
ASSUME CS:CODES,DS:DATAS ;假定各段使用的段寄存器,这句话是告诉 编译器的编译器在编译时遇见DATAS中的变量就把它会变成‘DS:变量’的形式 START: ;标号,标号简单的来说,就是在程序中做个标记,以便在编译器 的其他地方找到它所代表的地址!MOV AX,DATAS MOV DS,AX ;将DATAS的地址写入DS中...

汇编语言中 mov ds,ax 移动的是ax中的数据还是只是它的一个复制...
mov ds,ax 将ax中的数据赋值给ds,ax中的值不会消失。mov ax,data这句,如果是前面有assume ds:data的情况,是将地址值传给ax;若data是一个变量,如DATAS SEGMENTdata dw 12H;DATAS ENDS中的data,则是把data中的数据给ax。 本回答由提问者推荐 举报| 答案纠错 | 评论 11 0 kabbin2010 采纳率:33% 擅长...

微机原理程序三个数比较大小
assume cs:codes,ds:datas start: mov ax,datas mov ds,ax ;ds←数据段段地址值 call input ;调用输入过程 mov si,offset buffer ;si←缓冲首偏移地址 mov al,[si] ;al←缓冲区中的第一个数码 mov bl,[si+1] ;bl←缓冲区中的第二个数码 mov cl,[si+2] ;cl←缓...

汇编语言程序设计题
Assume CS:Code,DS:CodeCR equ 000DHLF equ 000AHKBBack equ 0008H;---; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段)Output MACRO Str_Addr lea dx,Str_Addr mov ah,9 int 21h EndM;---; 功能:在当前光标位置显示一个字符; 入口:dl=要显示的字符 Output_Ch...

高分悬赏!关于汇编语言的一些问题!
datas ends code segment start:mov bx, datas mov ds, bx mov cx, 6 mov bx, offset var xor ax, ax mov si, 0 next:add al, [bx+si]inc si loop next mov [answer], al mov ax, 4c00h int 21h code ends end start 2 assume cs:code, ds:datas datas segment var db 100,...

汇编中INT的用法
DATAS SEGMENT string1 db 'Jia I love you!$' ;这里是定义数据段 ,就是要显示的字符串DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS ;关联寄存器START: MOV AX,DATAS MOV DS,AX lea dx,string1 ds:dx 指向字符串 以$ 为结束符~ mov ah,9 ;...

请解释下一个汇编各行意思!
DATAS ENDS ;数据段定义结束 CODES SEGMENT ASSUME CS:CODES,DS:DATAS ;代码段,设置各段与段寄存器的;关联 START: MOV AX,DATAS MOV DS,AX ;初始化DS段寄存器 LEA DX,STRING ;显示字符串 MOV AH,9 INT 21H MOV AH,4CH ;退出程序,返回到dos INT 21H CODES ENDS ;代码段结束 END START 补充...

相似回答