下面程序又什么问题??(为什么没有输出a??)

来源:百度知道 编辑:UC知道 时间:2024/07/01 04:55:56
下面程序有什么问题??(为什么没有输出a??)
悬赏分:100 - 离问题结束还有 14 天 23 小时
assume cs:code,ds:data
data segment
aaa db 'abcd'
data ends

code segment
start:

mov ax,0b800h
mov es,ax
mov si,0

mov al,aaa
mov ds:[si],al

mov ah,0
int 16h
mov ax,4c00h
int 21h
code ends
end start

你上面的程序是想直接写屏;直接写屏有两个段址,字符显示模式时为B000H,图形模式时为B800H;想用段址B800H直接写屏,要先置显示模式为图形模式,才能确保你想看的字符.方法为:
mov ax,0012h/int 10h;记住置显示模式前应先读显示模式存入内存,程序退出前再恢复原显示模式,这样程序才完整.做完这些,再改
mov al,aaa /mov ds:[si],al为
mov AX,aaa /mov ES:[si],AX
就OK了!
如果用DEBUG手工汇编,mov ES:[si],AX要写成
ES: mov [si],AX。

加个 mov ah,02h
int 21h
不过这个也不知道行不行得通,但是你这个代码没有输出指令...

mov al,aaa
mov ds:[si],al
mov ah,0
int 16h
改为
mov dl,aaa
mov ah,2
int 21h

就是显示的问题,你看看书应该的是,要显示的字符是应该的放在dx之中的,同样的有一个的字符串显示的专用的命令 mov AH,9 int 21H 显示字符串 DS:DX=字符串。这个是规定的。在加深一下的印象。这些的介绍是在书的后面的附件之中的。

MOV ES:[SI],AL