汇编程序;== 给 DD数x 赋值的宏==将 DD 型的两个数 X,Y 其中 Y 的值赋给 X give macro x,y mov ax,y mov x,ax mov ax,y[2] mov x[2],ax endm ;** 给 DD数x 赋值的宏**将 DD 型的两个数 X,Y 其中 Y 的值赋给 X ;== 判断正负宏== 判断 DD型 x,y 的正负利用 fhx 、 fhy 两个常数记录下并将; 他们都化为正数方便运算 judge macro x,y local judge1,judge2,judge3,judge4;; 标号注释,用于保证宏的重复调用;; 定位的标号不错乱 mov ax,x cmp ax,0 jge judge1 mov fhx,1;; 记录 x 的正负 neg x;; 转换为正数 judge1: mov ax,x[2] cmp ax,0 jge judge2 mov fhx,1 neg x[2] judge2: mov ax,y cmp ax,0 jge judge3 mov fhy,1 neg y judge3: mov ax,y[2] cmp ax,0 jge judge4 mov fhy,1 neg y[2] judge4: endm ;** 判断正负宏结束** ;== 根据介入 y 值的 0,1将x 结果转为正或负== change macro x,y local change1 cmp y,0 je change1 neg x neg x[2] change1: endm ;** 根据介入 y 值的 0,1将x 结果转为正或负** ;== 进位宏开始== 对小数部分除以 100 ,将商进位,余数补回小数 carry macro x push cx;; 免除对宏外面的 cx,dx 值造成干扰 push dx mov ax,x[2] mov cx,100 mov dx,0 div cx mov x[2],dx add x,ax pop dx pop cx endm ;** 进位宏结束** ;== 新的加法宏开始== 算法,同号相加,异号相减 newadd macro x,y local subsub,endnewadd,returnadd1,xbig,endadd1,endadd2,endadd3,en dadda,endaddc judge number3,number4;; 不能直接代用 x,y. ;;x 其实既 number3,y 既 number4 。原因,下面一条注释 mov ax,fhx cmp fhy,ax jne subsub ;;------ 两个数符号相等则,直接两部分相加 mov ax,y add x,ax mov ax,y[2] add x[2],ax carry number3 change number3,fhx jmp endnewadd ;;--- 如果符号相反则,大数减去小数 subsub: mov ax,y cmp x,ax ja xbig jne endadda mov ax,y[2] cmp x[2],ax ja xbig endadda: mov ax,x sub y,ax add y[2],100 mov ax,x[2] sub y[2],ax cmp y[2],100 jnb endadd1 sub y,1 jmp endaddc endadd1: sub y[2],100 endaddc: give number3,number4 change number3,fhy jmp endnewadd xbig: mov ax,y sub x,ax add x[2],100 mov ax,y[2] sub x[2],ax cmp x[2],100 jnb endadd2 sub x,1 jmp endadd3 endadd2: sub x[2],100 endadd3: change number3,fhx jmp endnewadd endnewadd: mov fhx,0 mov fhy,0 endm ;** 新的加法宏结束** ;== 新的减法宏== newsub macro x,y mov fhx,1 change number4,fhx mov fhx,0 newadd number3,number4 endm ;** 新的减法宏** ;== 新的乘法宏== 算法(a1+b1)*(a2+b2)=a1*a2+a1*b2+a2*1+b1*b2 newmul macro x,y judge number3,number4 push bx push dx mov bx,y mov ax,x mul bx push ax;; 压栈用于后面的加法 mov
汇编程序 来自淘豆网www.taodocs.com转载请标明出处.