一个关于汇编的地址问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 13:49:14
stacks segment use16
DB 256 DUP(0)
STACKS ENDS
DATAS SEGMENT USE16
N EQU 26
string2 DB N+1
COUNT DB 0
CHAR DB N+1 DUP(0)
string1 DB 'Please input:',13,10,'$'

DATAS ENDS

CODES SEGMENT USE16
ASSUME CS:CODES,DS:DATAS

START: MOV AX,DATAS
MOV DS,AX
LEA DX,string1
MOV AH,09H
INT 21H
LEA DX,string2
MOV AH,0AH
int 21h
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H

CODES ENDS
END START

这段代码的显示最后为什么好像地址出了错?能帮忙看看吗?
在线等结果!

看来,DEBUG通过才靠的住!
stacks segment
DB 256 DUP(0)
STACKS ENDS
DATA SEGMENT
N EQU 26
string2 DB N+1;预置接收待输入字符串长度
COUNT DB 0 ;实际输入字符串长
CHAR DB N+1 DUP(0)
string1 DB 'Please input:',13,10,'$';提示
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:stacks

START: MOV AX,DATA
MOV DS,AX
LEA DX,string1
MOV AH,09H
INT 21H
LEA DX,string2
MOV AH,0AH
int 21h
mov si,dx; 定位字符串首
mov al,0dh;加个回车
mov [si],al
inc si
mov al,0ah;加上换行,防覆盖显示
xchg al,[si];存入换行符,并取实际串长
mov ah,0
add si,ax
mov byte ptr [si+1],'$';用字符串结束标记替换原来的回车符
MOV AH,09H
INT 21H
mov ah,0
int 16h ;等待
MOV AH,4CH
INT 21H

CODE ENDS
END START

问题出在第2次调用09号功能的地方:
MOV AH,09H
INT 21H
这个调用要求DX指向的串要以“$”结尾,而你用0A号功能得到的串是以“回车符”结尾的,所以会显示一大堆乱七八糟的符号,直到碰到一个“$”为止。
所以你只需要在第2次调用09号功能之前,写一