很简单的一个汇编小问题……

来源:百度知道 编辑:UC知道 时间:2024/06/07 15:32:25
code segment public
assume cs:code,ds:code
org 100h
start: jmp begin
msg db 'hello,world! $'
begin: mov ax,cs
mov ds,ax
mov dx,offset msg
mov ah,09h
int 21h
mov ah,4ch
int 21h
code ends
end start
--------------------------------------
mov ax,cs
mov ds,ax这俩句有什么用啊,有这俩句会出现hello world!
没这俩句会出现¥&*hello world!
为什么会这样,请教一下!
谢谢,我没注意到ds:code!
估计书上图方便,没整数据段。

你的程序可以这么来写:
DATA SEGMENT
MSG DB 'hellow world!$'
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
mov dx,offset msg
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start
首先说明下:
assume cs:code,ds:code 是不对的
应该是assume cs:code,ds:data

就你的问题mov ax,cs 是可以不用的,但是
mov ax,data
mov ds,ax
这两句是必须的,因为
assume cs:code,ds:data
是一句相当于说明性的文字即:cs指向代码段,ds指向数据段
但是并没有实际指向
而mov ax,data
mov ds,ax这两句就是是ds实际的指向数据段,当然cs你不用管默认就行

基本上就这样就行了,你可以将
DATA SEGMENT
MSG DB 'hellow world!$'
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA