今天才到自己的电脑上安装了masm6.15,可是安装之后显示edit不兼容,我是win8,于是下载了DOSBOX,用它来编写汇编,但是自己又发现问题了,之前一直用高级语言编写,以为汇编也会像高级语言一样直接编译运行,自己输入数据,然后输出结果,原来这个时候才发现根本不是那么回事啊

,然后问题就来了
1.想请教一下

DATA SEGMENT
TABLE DB 0,1,4,9,16,25,36,49,64,81
BUF DB 'please input a number(0~9):',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET BUF
MOV AH,9H
INT 21H
MOV AH,01
INT 21H
AND AL,0FH
MOV BX,OFFSET TABLE
MOV AH,0
ADD BX,AX
MOV AL,[BX]
MOV DL,AL
MOV AH,02
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
这是源代码,功能是输入一个1~9的数,然后输出其平方值,代码本身应该没有错,但是是不是我自己的输入出现了问题,我先用U 找出每一步的地址,然后g,后面跟最后一步的地址,这样意思不就是直接调运行到了最后一行的地址么ps:这种想法没错吧?然后我输入一个数,可是为什么得不出结果,后面还显示各个各个栈和寄存器的值,我的想法是就比如输入一个数9,直接输出81,后面什么栈啊寄存器啊都不显示出来,这是什么原因,还是我的DOSBOX安装除了问题,还是我的输入方式有问题?
类似于这张图片

这个代码时这样的:
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP(?) ;注意这里只有128个字节
STACKS ENDS
DATAS SEGMENT ;数据段
;请在这里定义您的数据
MSG DB 'This message'
MSGLEN EQU $-MSG
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
MOV CX,MSGLEN
MOV SI,0
MOV AH,2
NEXT:
MOV DL,MSG[SI]
INT 21H
INC SI
LOOP NEXT
MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START
就是输出This message,难道就不能直接运行就输出吗,非要找到地址然后g加上最后一行代码的地址?还有第一个程序后面为什么会有寄存器堆栈的值之类的?
2.第二个问题是关于一道汇编程序的
输入两个数,输出他们的积。我的代码:
CODE SEGMENT
ASSUME CS:CODE
START:MOV AH,01H
INT 21H
AND AL,0FH
MOV BL,AL
SUB BL,30H
MOV AH,01H
INT 21H
SUB AL,30H
MUL BL
MOV BL,10
DIV BL
MOV BL,AH
CMP AL,0
JE NEXT
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
ADD BL,30H,
MOV DL,BL
MOV AH,02H
INT 21H
NEXT: ADD BL,30H
MOV DL,BL
MOV AH,02
INT 21H
EXIT: MOV AX,4C00H
INT 21H
CODE ENDS
END START
真感觉没什么问题,可是一运行我就实在不解了,我贴一下自己运行的图片:

第一,当我输入7空格8时,就可卡了,这是不是系统把字符也当成了一个字符,这我还可以理解,可是我想要的结果呢?为什么没出现,后面出现这一堆是什么意思啊,我就想输出一个简简单单的56啊

,感觉要炸了,第一次编汇编就弄成这样,明天得去图书馆弄本汇编的书来冷静冷静了!!希望各位大神对我这种这点小问题还弄的抓狂的一些指点啊
