如何用汇编语言求AX中数的绝对值,并存AX中

如题所述

第1个回答  2017-01-04
你说一个思路,如果AX的最高位是0,则AX的内容就是它的绝对值,如果AX的最高位是1,那么就把AX按位取反,末尾+1,就得到了AX的绝对值
------Solutions------
so easy

code segment
assume cs:code
start: and ax,0111111111111111b
mov ah,4ch
int 21h
code ends
end start
------Solutions------
neg

------Solutions------
.
.
.
mov ax,8123H
test ax,8000h
jz eixt ;如果最高位为0则为正数,不处理
neg ax ;否则求补并存入原寄存器
exit:mov ah,4ch
int 21h
.
.
------Solutions------
;just this works
test ax,8000h
jz ok
neg ax
ok:...
------Solutions------
cwd
xor ax, dx
sub ax, dx
恐怕不少汇编水平不错的人都不知道,而C编译器通常却有最快答案
楼上几位用条件转移的就慢得多
------Solutions------
xiaott(我能睡觉吗)
第4句 neg ax 能否改为 jnz ax
neg我不知道是什么,好像是否定的意思
------Solutions------本回答被网友采纳

如何用汇编语言求AX中数的绝对值,并存AX中
你说一个思路,如果AX的最高位是0,则AX的内容就是它的绝对值,如果AX的最高位是1,那么就把AX按位取反,末尾+1,就得到了AX的绝对值 ---Solutions--- so easy code segment assume cs:code start: and ax,0111111111111111b mov ah,4ch int 21h code ends end start ---Solutions--- n...

汇编 绝对值
data segment number1 db -3;给定的整数 number2 db ?;存放给定整数的绝对值 data ends code segment assume ds:data,cs:code main proc far mov ax,data mov ds,ax mov al,number1 test al,80h jz disp;如果给定整数是正数则转到disp neg al;为负数,则求出绝对值 disp:mov number2,al ...

汇编语言求绝对值
(2)清除进位标志 (3)将低字求反,然后 +1 (4)将进位保存起来 (5)将高位字求反,加上刚才的进位 返回

用汇编语言求两个数的绝对值?要求写出全过程..谢谢
ORG 1000H BUF1 DB 1,2,-3,4,-5 BUF2 DB 3,4,-6,7,-8 BUF3 DB 5 DUP(?)DATAS ENDS STACKS SEGMENT DB 100 DUP (0)STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX MOV ES,AX MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF2 MOV BX...

用汇编语言编把DX AX中放的有符号二进制数求绝对值并送入CX BX之中DX...
Start: mov ax,12345 mov dx,54321 test dx,8000h ;判断正负数 jz Save_another ;正数,直接保存 ;负数,取反加1 not ax ;取反 not dx ;取反 add ax,1 ;低位字加1 adc dx,0 ;高位字带进位加0 Save_Another:mov bx,ax ;低位字送BX保存 mov cx,dx ;高位字送CX保存 mov ah,4ch ;...

汇编语言求数据y的绝对值
code segment assume CS:code,DS:data start:mov ax,data mov ds,ax mov al,Y ;把Y放入AL cmp al,0 ;把Y的值与0相比较 jge label ;大于或等于0转移到标号lable neg al ;小于0则用取相反数 lable:mov Y1,al ;绝对值结点保存在Y1 mov ah,4ch int 21h code ends end s...

汇编语言求绝对值 Y={X,(X>0);-X,(X<0)}
start: mov ax,dseg mov ds,ax mov ax,[x] ;取X的值 cmp ax,8000h ;如果小于8000H.表明是正数 jc LB0 neg ax ;求补,将负数变成正数 LB0: mov [y],ax ;mov ax,4c00h ;程序结束 int 21h cseg ends end start ...

汇编语言求绝对值Y=X,(X>0),Y=-X,(X<0)
为防抽,加一行字,程序如下。dseg segment X db -100 Y db ?dseg ends cseg segment assume cs:cseg, ds:dseg START:mov ax, dseg mov ds, ax mov al, X or al, al jns Done neg al Done:mov Y, al mov ah, 4ch int 21h cseg ends end START ...

汇编语言程序实现求补码数的绝对值。
回答:如果一个数是X:用8086汇编: not x inc x如果X是正数 X还是X;如果X是负数 X是-x;

汇编语言程序实现求补码数的绝对值。
如果一个数是X:用8086汇编: not x inc x如果X是正数 X还是X;如果X是负数 X是-x;

相似回答