一个汇编问题,以下的代码错在哪里,目的是在屏幕上输出welcome to asm的字符串,请指正,谢谢!

2024-11-27 01:33:45
推荐回答(2个)
回答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:

;试试这个代码
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0B800H
mov es,ax
t: mov di,0H
mov bx,0
mov cx,10H
g: mov al,[bx]
mov es:[di],al
add di,2
inc bx
loop g
jmp t
mov ax,4c00H
int 21H
code ends
end start