首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

MASM编译没异常警告,运行输出时乱码。帮忙看下是哪里出错了

2013-11-08 
MASM编译没错误警告,运行输出时乱码。帮忙看下是哪里出错了stacksegment stack stackdw 32 dup(0)stacken

MASM编译没错误警告,运行输出时乱码。帮忙看下是哪里出错了
stack        segment stack 'stack'
                dw 32 dup(0)
stack        ends
data        segment 
SCORE        DB 78,80,95,98,99,91,90,88,85,87,87,89,70,73,74        
                DB 72,78,74,77,71,70,60,65,68,62,66,55,50,48,30
COUNT        DB        0AH,0DH,'>=90 :$'
                DB        0AH,0DH,'80~89:$'
                DB        0AH,0DH,'70~79:$'
                DB  0AH,0DH,'60~69:$'
                DB        0AH,0DH,'<60  :$'
TAB                DW  5 DUP(0)
data        ends
code        segment 
begin        proc far
                assume ss: stack, cs: code, ds: data
                push ds
                sub ax, ax
                push ax
                mov ax, data
                mov ds, ax
                MOV BX, 0
                MOV CH, 10
                MOV DI, 0
AGAIN:        CMP BX, 30
                JZ        OBJ
                MOV AL, SCORE[BX]
                INC BX
                CMP AL, 90
                JNC P0
                CMP AL, 80
                JNC P1
                CMP AL, 70
                JNC P2
                CMP AL, 60
                JNC P3
                JMP  P4
OBJ:        CMP DI, 10
                JC NS
                MOV CH, 0
NA:                MOV AX,0
                MOV AL, 9
                MUL CH
                MOV BX, AX
                MOV DX, OFFSET COUNT[BX]
                MOV AH, 9
                INT 21H
                MOV AX,0
                MOV AL,2
                MUL CH
                MOV BX, AX


                MOV AH, 2
                MOV DL, BYTE PTR TAB[BX] 
                INT 21H
                MOV DL, BYTE PTR TAB[BX+1]
                MOV AH,2
                INT 21H
                INC CH
                CMP CH, 5
                JNZ NA
                RET                
NS:                MOV AL, BYTE PTR TAB[DI]
                MOV AH,0
                DIV CH
                XCHG AH, AL
                OR  AX, 3030H
                MOV TAB[DI], AX
                ADD DI, 2
                JMP OBJ
P0:                INC BYTE PTR TAB
                JMP AGAIN
P1:         INC BYTE PTR TAB+2
                JMP AGAIN
P2:                INC BYTE PTR TAB+4
                JMP AGAIN
P3:                INC BYTE PTR TAB+6
                JMP AGAIN
P4:                INC BYTE PTR TAB+8
                JMP AGAIN                

                ret
begin        endp
code        ends
                end begin

[解决办法]
从你说的功能上,没有什么不同。
对 mov dx, offset 类指令来说,生成的是 mov dx, imm16 这样的,BUFF[bx] 无法在编译阶段形成一个立即数,所以这个形式的指令无法支持;而 BUFF+6 却可以,因为 BUFF 的地址和偏移的 6 都是确定已知的。

热点排行