当前位置: 代码迷 >> 汇编语言 >> 汇编输出字符串,该如何处理
  详细解决方案

汇编输出字符串,该如何处理

热度:2104   发布时间:2013-02-26 00:00:00.0
汇编输出字符串
;************************************
data segment
org 2000h
string db 'hello,world$'
data ends
;************************************
code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax

mov ah,09h
lea dx,string;调试的时候dx=2000h,但是'hello,world$'存在ds:2100中???为什么?
int 21h
ret
main endp
code ends
     end start


------最佳解决方案--------------------------------------------------------
引用:
1. 不懂psp是什么,org 2000h,接下来的数据应该存在ds:2000h中啊?
psp 是程序前面的一块内存,保存了些和当前程序相关的些系统信息和程序信息,dos 汇编的书上都有介绍的吧,其中最相关的应该是 80h 处开始的命令行参数部分了。dos 载入程序后将 ds 指向这里,因为它也不知道你的程序哪里是你中意的数据段,所以要自己在程序开始时以及适当的时候设置 ds 指向相应的数据段,方法就是上面的那两个指令。

引用:
2.
start:     
push ds    
sub ax,ax     
push ax
一直不懂这是什么意思?
这个是和程序最后的 retf 指令配合的,即程序最后返回到 psp:0000 处,那里有个 int20h 指令,以完成“结束程序并返回DOS”的功能。现在多推荐在程序的最后使用下面的代码来实现该功能而不是上面的代码
  mov ah, 4ch
int  21h

------其他解决方案--------------------------------------------------------
这个呀,你还没设置ds指向data段呢。
;************************************
data segment
    org 2000h
    string db 'hello,world$'
data ends
;************************************
code segment
main proc far
    assume cs:code,ds:data
start:
; 这句话是让最后程序返回不会报错的
; retf 地址 ds:ax
    push ds
    sub ax,ax
    push ax
 
; 这里设置一下,让ds指向data段就没问题了
mov ax,data
push ax
pop ds
 
    mov ah,09h
    lea dx,string
    int 21h
    ret
main endp
code ends
     end start

------其他解决方案--------------------------------------------------------
因为你没有将 ds 指向到 data 段而是缺省的 psp ,psp 占用了 100h 字节。使用 string 前应该有
    mov  ax, data
    mov  ds, ax

------其他解决方案--------------------------------------------------------
1.
  不懂psp是什么,org 2000h,接下来的数据应该存在ds:2000h中啊?
2.
start:     
push ds    
sub ax,ax     
push ax
一直不懂这是什么意思?  
------其他解决方案--------------------------------------------------------
姐,你这段代码是写在哪里的,怎么编译啊
------其他解决方案--------------------------------------------------------
PSP起始两字节存放"INT 20H"指令的机器码(CDH 20H),该指令使程序返回DOS;
EXE程序刚运行时,DS和ES指向PSP首址,即INT20H指令的机器码:COM程序刚运行时,DS,ES,CS,SS均指向PSP首址。
  相关解决方案