assume cs:codesg
codesg segment
start:
mov ax,cs
mov ds,ax
mov si,offset do0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset do0end-offset do0
cld
rep movsb ;把中断之后运行的程序代码送到 0000:0200
mov ax,0
mov es,ax
mov word ptr es:[0*4],200h
mov word ptr es:[0*4+2],0 ;设置中断向量
mov bx,1
mov ax,0ffffh
div bx ;溢出除法
do0:jmp short do0start
db "divide error",0
do0start:
mov ax,0
mov ds,ax
mov si,202h
mov ax,0b800h
mov es,ax
mov di,12*160+36*2
s: mov ch,0
mov cl,byte ptr [si]
jcxz ok
mov al,[si]
mov es:[di],al
inc si
add di,2
jmp short s
ok: mov ax,4c00h
int 21h
do0end: nop
codesg ends
end start
问题:关于do0:jmp short do0start这一步,我觉得可以不要,直接按照顺序来执行不是也可以吗?
还有cpu是如何执行db "divide error",0这条指令的?是不是直接向内存中写入,而且占的空间大小13个byte还是16个byte? |