汇编代码:win7下显示不出结果?

BrightPi 2013-08-09 02:34:28
最近在学王爽的《汇编语言》,奇怪的是在 WinXP 下能看到结果的代码,在 Win7 下却看不到。下面的代码就产生了这种现象(这段代码在 WinXP 下可以运行,并看到结果,而在 Win7 也可以编译运行,但是看不到结果)。编译和链接的工具分别是 masm,版本:5.0 和 masm32的 doslnk(或link16)。

assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,128

mov ax,0b800h
mov es,ax
mov ah,'a'
s: mov es:[160*12+40*2],ah ;display for a moment
call delay
inc ah
cmp ah,'z'
jna s

mov ax,4c00h
int 21h

delay: push ax ;delay for a moment
push dx
mov dx,2000h
mov ax,0
s1: sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
code ends
end start


奇怪的是,如果换成是调用 BIOS 的终端处理程序,那么在 WinXP 和 Win7 下都可看到结果。比如下面的时间信息显示代码调用了 int 21h 终端处理程序来打印字符串,在 WinXP 和 Win7 下都能看到结果。

assume cs:code
data segment
db ' / / : : ','$' ;18 bytes
db 9,8,7,4,2,0 ;6 bytes
db 0,3,6,9,12,15 ;6 bytes
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,18
mov cx,6
s: push cx
mov al,[si]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,0fh
add ah,30h
add al,30h
mov bl,[si+6]
mov bh,0
mov [bx],ah
mov [bx+1],al
inc si
pop cx
loop s

mov ah,2 ;10h的2号子程序,置光标
mov bh,0 ;第0页
mov dh,12 ;行号
mov dl,35;列号
int 10h

mov ax,data
mov ds,ax
mov dx,0 ;ds:dx指向字符串
mov ah,9 ;int 21h 的9号子程序
int 21h

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

其运行结果为:


想问问这是为什么?
...全文
216 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
BrightPi 2013-08-11
  • 打赏
  • 举报
回复
好吧,结贴给分。这里太冷了,都没有人回帖。
zara 2013-08-09
  • 打赏
  • 举报
回复
dos 的这些显示,还是直写视频缓冲区的,在 xp/win7 下都是虚拟出来的,所以表现上就差强人意了;试试 Alt+Enter 将命令行窗口全屏化了运行这程序吧。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧