天天看点

汇编学习-实验12解析

按照汇编语言书上的指导,自己重新梳理了一下,完成实验十二。这中间遇到一些问题,网上搜了一些帮助,然后自己又多次调试和对比书上的答案,做了一番总结。

先将答案贴上:

assume cs:code
code segment
start:
	;do0 install programm
	; set ds:si directing the source address
	mov ax,cs	;keep the pointer is the start
	mov ds,ax
	mov si,offset do0

	; set es:di directing the destination address
	mov ax,0
	mov es,ax
	mov di,0200h

	mov cx,offset do0ends-offset do0
	cld		;si and di are forward increment
	rep movsb

	;set interrupt vector table
	mov ax,0
	mov es,ax
	mov word ptr es:[0*4],200h
	mov word ptr es:[0*4+2],0

	call divExample
	mov ax,4c00h
	int 21h

do0:
	jmp short do0start	
	db 'Overflow!'
do0start:	
	;show string "Overflow!"
	mov ax,cs
	mov ds,ax
	mov si,202h
	
	mov ax,0b800h
	mov es,ax
	mov di,12*160+36*2
	
	mov cx,9
s:
	mov al,[si]
	mov es:[di],al
	inc si
	add di,2
	loop s

	mov ax,4c00h
	int 21h
do0ends:
	nop
divExample:
	mov ax,1000
	mov bh,1
	div bh
	ret
code ends
end start
           

关于实验12的总结:

在do0中,首先将cs传给ds,因为这是程序的入口处;

然后将si赋值为202,因为jmp占两个字节

我在中间遇到的一个错误是传递字符串时使用mov [di],al,应该是mov es:[di],al。默认的只有对ds可以使用[di]或者[si]

另外,可以将测试代码做成一个函数,在中断程序后调用。

继续阅读