第十章 CALL和RET指令

10.8MUL指令

mul指令是乘法指令,用来处理乘法运算的。需要注意以下两点:

(1) 两个相乘的数:要么都是8位的,要么都是16位点。如果是8位的,一个默认在al里面,另一个默认在8位的reg中或者内存中;如果是16位的,一个默认在AX中,另一个默认在一个16位的reg中或者是内存中。

(2)结果:如果是一个8位数的乘法,结果默认是放在AX中;如果是一个16位的乘法,结果高位默认是在DX中,低位是在AX中。

格式如下:

mul reg
mul 内存单元

内存单元还可以使用不同的寻址方式:

mul byte ptr ds:[0]

1.编程,计算100*10

mov al,100
mov bl,10
mul bl

2.编程计算100*10000

因为10000大于255,所以只能用16位的乘法

mov ax,100
mov bx,10000
mul bx

10.10参数和结果传递的问题

自程序需要处理一定的事务,处理后,将结果(返回值)提供给调用者,实际就是在讨论参数和返回值的问题。

计算一个数的3次方

;说明:计算N的三次方
;参数:(bx)=N
;结果:(dx:ax)=N^3

cube:mov ax,bx
      mul bx,
      mul bx
      ret

用寄存器来作为参数和返回结果是一个比较常用的手段。

编程,计算下面data段中的第一组的数据,结果保存在后面一组中

assume cs:code
data segment
  dw 1,2,3,4,5,6,7,8
  dd 0,0,0,0,0,0,0,0
data ends

代码如下:

assume cs:code
  data segment
    dw 1,2,3,4,5,6,7,8
    dd 0,0,0,0,0,0,0,0
  data end;
  code segment
     start:mov ax,data
         mov ds,ax
         mov si,0
         mov di,16
         
         mov cx,8
       s:mov bx,[si]
         call cube
         mov [di],ax
         mov [di].2,dx
         add si,2
         add di,4
       cube:mov ax,bx
            mul bx
            mul bx
            ret
            
   code ends
 end start

共有 0 条评论

Top