一条简单的8086汇编语言提问

2024年12月02日 14:59
有4个网友回答
网友(1):

这个程序有点错误. 改正后倒是可以在如xp等的控制台窗口里执行.
code segment
assume cs:code
e:mov ax,0b800h
mov ds,ax

mov al,'b'
push ax
call s11

mov cx,4c00h ; 误,改成mov ax, 4c00h
int 21h

s11:mov bp,sp
mov ax,[bp+2]
mov ds:[1],01011001b ; 这是颜色值吧,写成mov byte ptr ds:[1], 01011001b 更佳
mov ds:[0],al ;写传过去的ascii字符到显存
ret 2
code ends
end e

最后是运行的时候要注意,最好在执行前先开好cmd窗口,在cmd命令提示符中把本程序所在的目录设为当前目录。
因为本程序直接访问了显存,所以要在虚拟86环境下执行,可能输出的显示效果有问题,且因为执行结果与屏幕有关,在执行前分别执行下cls(清屏)与
debug然后输入q退出debug,
最后再输入本程序可执行程序名执行,一般来说会看到执行结果。

网友(2):

不管你这个程序是不是对的,前提
1、在纯dos环境下

2、使用bochs类可以完全仿真dos的模拟器

那个马甲。。。

网友(3):

mov指令的执行速度会比lea指令更快 再就是 offset 只能与简单的符号地址相连 而不能和诸如VAR1[SI]等复杂操作数相连 其他应该就没什么不同了

网友(4):

程序里面没有要求显示字符的DOS中断啊?