agittarius 发表于 2012-4-10 22:48:38

我的机器是肿么了。。为啥程序没有问题,就是不在屏幕上显示呢。。

做了汇编实验九,不能在屏幕上显示,开始以为是我写错了,又到网上找了答案,但是还是不能显示,进入debug中调试时却看到在屏幕上显示了。现在做实验12,先不说不能在屏幕上显示,安装完0号中断后,调试写的那个除法溢出程序,还是和以前一样,又用网上下的答案中的程序运行后还是一个结果,是我的机器的问题吗??下面是我写的源程序。。
assume cs:codesg
codesg segment
start:   mov ax,cs   ;定位到do0程序处
   mov ds,ax
   mov si,offset do0
   
   mov ax,0h   ;定位到安全的内存空间
   mov es,ax
   mov di,200h
   
   mov cx,offset do0end - offset do0 ;cx长度
   cld
   rep movsb
   
   mov ax,0   ;设置中断向量表
   mov es,ax
   mov word ptr es:,200h
   mov word ptr es:,0h
   mov ax,4c00h
   int 21h
   
do0:   jmp do0start
   db 'welcome to masm!'
do0start:mov ax,cs
   mov ds,ax
   mov si,202h
   
   mov ax,0b800h
   mov es,ax
   mov di,160*12+36*2
   
   mov cx,16
s:    mov al,
   mov es:,al
   inc si
   add di,2
   loop s
   
   mov ax,4c00h
   int 21h
   
do0end:   nop
codesg ends
end start

为了确定那个答案是否正确,这里也贴出来。。。
assume cs:code
code segment
start:mov ax,cs
      mov ds,ax
      mov si,offset do0               ;设置ds:si指向源地址

      mov ax,0
      mov es,ax
      mov di,200h                     ;设置es:di指向目标地址

      mov cx,offset do0end-offset do0 ;设置cx为传输长度

      cld                           ;设置传输方向为正
      rep movsb

      mov ax,0
      mov es,ax
      mov word ptr es:,200h
      mov word ptr es:,0       ;设置中断向量表
      
      mov ax,4c00h
      int 21h

do0:    jmp short do0start
      db 'divide error!'

do0start:mov ax,cs
         mov ds,ax
         mov si,202h                  ;设置ds:si指向字符串

         mov ax,0b800h
         mov es,ax
         mov di,12*160+34*2             ;设置es:di指向显存空间的中间位置

         mov cx,13                      ;设置cx为字符串长度
s:       mov al,
         mov es:,al
         inc si
         add di,2
         loop s

         mov ax,4c00h
         int 21h

do0end:nop
code ends
end start

这个是除法溢出代码。
assume cs:codesg
codesg segment
start: mov ax,1000h
   mov bh,1h
   div bh
   
   
codesg ends
end start

这个是我在屏幕上不能显示,但是能在debug时显示的代码:
assume cs:codesg
data segment
db 'welcome to masm!'
db21h
data ends
codesg segment
start:   
   mov ax,data
   mov ds,ax
   mov si,0
   mov bx,10h
   
   mov ax,0b800h
   mov es,ax
   mov di,160*12+36*2
   
   mov cx,16
s:    mov al,
   mov es:,al
   mov al,
   mov es:,al
   inc si
   add di,2
   loop s
   
   mov ax,4c00h
   int 21h
codesg ends
end start   

页: [1]
查看完整版本: 我的机器是肿么了。。为啥程序没有问题,就是不在屏幕上显示呢。。