|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
做了汇编实验九,不能在屏幕上显示,开始以为是我写错了,又到网上找了答案,但是还是不能显示,进入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:[0*4],200h
mov word ptr es:[0*4+2],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,[si]
mov es:[di],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:[0*4],200h
mov word ptr es:[0*4+2],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,[si]
mov es:[di],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!'
db 21h
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,[si]
mov es:[di],al
mov al,[bx]
mov es:[di+1],al
inc si
add di,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
|
|