一个汇编问题,以下代码为什么不能编译,生成obj文件,请指正,谢谢!

2025-01-06 12:33:55
推荐回答(4个)
回答1:

看来,楼主是想要“直接写屏”。

程序修改如下。

可在XP的DOS窗口下,用MASM 5.0编译...

assume cs:codesg,ds:datasg

;------------------------

datasg segment

    DB  'w', 06H    ;定义字符和属性

    DB  'e', 02H

    DB  'l', 07H

    DB  'c', 26H

    DB  'o', 85H

    DB  'm', 74H

    DB  'e', 98H

    db "welcome to asm"  ;这些就不合适了

datasg ends

;------------------------

codesg segment

start:

    MOV  AX,  datasg

    MOV  DS,  AX

    mov  bx, 0b800h

    mov  es, bx

    mov  bx, 0

    mov  cx, 6    ;14

s:

    mov  ax, [BX]      ;取来字符和属性

    mov  es:[BX], ax   ;直接写屏

    add  BX, 2         ;每次写两个字节

    loop s             ;循环6次

    

    mov ax, 4c00h      ;退出

    int 21h

codesg ends

    end start 

;------------------------

程序运行后,显示如下图:

回答2:

s2:mov b8000:[0],ax
这句是错的
可以改成
s2:
mov dx,0b800h
mov es,dx
mov di,0
stosw

回答3:

能给出编译时编译器输出的错误信息么?

回答4:

查一下编译器手册,看是不是选项用错了。