当前位置: 代码迷 >> 汇编语言 >> 汇编代码:win7下显示不出结果?解决思路
  详细解决方案

汇编代码:win7下显示不出结果?解决思路

热度:379   发布时间:2016-05-02 04:41:08.0
汇编代码:win7下显示不出结果?
最近在学王爽的《汇编语言》,奇怪的是在 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

其运行结果为:
  相关解决方案