汇编 已知AX中存放有一有符号数,试编程求其绝对值。

来源:百度知道 编辑:UC知道 时间:2024/09/21 08:02:59
汇编 已知AX中存放有一有符号数,试编程求其绝对值。

如题。。。谢谢了!
试利用移位指令实现AL*10,并将结果存入AX

XOR AH, AH ;AH
MOV BX, AX ;
MOV CL, 3
SHL BX, CL ;
SHL AX, 1 ;
ADD AX, BX ;

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code
Start:
; 求AX的绝对值
test ax,8000h ;测试符号位
jz $+3 ;符号位为0,说明是正数,不作处理
neg ax ;若是负数,求补

; AL*10
xor ah,ah ;ah置0,准备移位操作
shl ax,1 ;左移一位,乘2
mov bx,ax ;送bx保存
shl ax,1 ;再乘2,相当于乘4
shl ax,1 ;再乘2,相当于乘8
add ax,bx ;al*(8+2)=al*10
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束

1.
test ax,8000h
jz tj
neg ax
tj:int 3
2.
shl al,1;AL乘2
mov bl,al;BL为AL乘2
mov cl,2
shl al,2;AL在乘2的基础上再乘4,相当于在原有基础上乘8
add al,bl;AL在原有基础上乘10

CMP AX, 8000H
JL L0 ;小于证明最高位为0
NOT AX; 求反
INC AX; 加1
L0: ;输出AX
;-------------------
XOR AH, AH ;AH清零
MOV BX, AX ;
MOV CL, 3
SHL BX, CL ;左移3位(扩大到原来的8倍)
SHL AX, 1 ;(扩大到原来的2倍)
ADD AX, BX ;加起