【第十章】CALL和RET指令(2)

10.7 call和ret的配合使用

利用call和ret实现子程序的机制,框架如下:

标号:
	指令
	ret

具有子程序的源程序的框架:

assume cs:code
code segment
main:
		...
		call sub1
		...
		mov ax,4c00h
		int 21h

sub1:
		...
		call sub2
		...
		ret

sub2:
		...
		ret
code ends
end main

10.8 mul指令

mul指令是乘法指令,使用mul做乘法的时候,要注意以下两点:

  1. 两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;如果是16位,一个默认在AX中,另一个放在16位寄存器或内存字单元中
  2. 结果:如果是8位乘法,结果默认放在AX中;如果是16位乘法,结果高位默认在DX中存放,低位在AX中存放

编程:计算data segment中8个数字的立方,并存储到data段中

assume cs:code,ds:data

data segment
	dw 1,2,3,4,5,6,7,8
	dd 8 dup (0)
data ends

code segment
main:	mov ax,data
	mov ds,ax
	mov si,0	;指向data段中第一行数据
	mov di,16	;指向data段中第二行数据

	mov cx,8
s:	mov bx,ds:[si]
	call cube
	mov ds:[di],ax
	mov ds:2[di],dx
	add si,2
	add di,4
	loop s

	mov ax,4c00h
	int 21h

cube:	mov ax,bx
	mul bx
	mul bx
	ret
code ends
end main