天天看點

彙編學習-實驗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]

另外,可以将測試代碼做成一個函數,在中斷程式後調用。

繼續閱讀