代码都用MASM for Windows 运行无错。
用proteus也编译过一个进行3次加法的小程序,能够正常debug
用proteus编码以下的程序,
编译成功后,进行debug,
一个问题是显示unknown 1-byte opcode at 0000:0004! 6F,而这个单元存储的是小写字母o的ascii 6F
代码功能,反序存放数据,并把其中的小写字母变成大写字母存放
DATA SEGMENT
ORGIN DB 'The orginal sentence: How are you doing?'
ORG 1000H
FINAL DB 'The vatried sentence:'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV CX,40
MOV AH,2
TP:MOV AL,[SI]
MOV DL,AL
INT 21H
INC SI
LOOP TP
MOV DL,0AH
INT 21H
LEA SI,FINAL
MOV CX,20
FIN:MOV AL,[SI]
MOV DL,AL
INT 21H
LOOP FIN
LEA SI,0016H[ORGIN]
LEA DI,0100H[SI]
MOV CX,18
LP0:CLD
LODSB
CMP AL,61H
JL TRANS
CMP AL,7AH
JG TRANS
SUB AL,20H
TRANS:STD
STOSB
LOOP LP0
INC DI
MOV CX,18
LP1:MOV AL,ES:[DI]
MOV DL,AL
INT 21H
INC DI
LOOP LP1
MOV AH,4CH
INT 21H
CODE ENDS
END START
第二个问题是debug直接从后面的指令进行,然后又跳过了循环,输出错误,debug到最后显示 no source line at PC address
代码如下,只是用来计算数据里面的负数个数并存储到数据的后面:
DATA SEGMENT
STRING DB 3,45H,4FH,0C9H
N EQU 3
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:MOV AX,DATA
MOV DS,AX
LEA DI,STRING
MOV CX,[DI]
MOV BL,0
MOV CH,0
INC DI
LP0: MOV AL,[DI]
AND AL,80H
JNS LP1
INC BL
LP1: INC DI
LOOP LP1
MOV [DI],BL
MOV AH,4CH
INT 21H
CODE ENDS
END START
所以问题来了,这是软件问题还是代码问题?