简单汇编语言实例

2024年11月15日 03:30
有2个网友回答
网友(1):

(1)判断双字的高位字是不是1,如果不是,直接返回
(2)清除进位标志
(3)将低字求反,然后 +1
(4)将进位保存起来
(5)将高位字求反,加上刚才的进位
--------------
XXXX:
MOV AX, X + 1 ;取 X 的高位字
CMP AX, 32768
JB X_EXIT ;是正数就跳转

MOV AX, X ;取 X 的低位字
XOR AX, 0FFFFH ;取反
ADD AX, 1
PUSHF
MOV X, AX

MOV AX, X + 1 ;取X 的高位字
XOR AX, 0FFFFH ;取反
POPF
ADC AX, 0
MOV X + 1, AX

X_EXIT:
RET

网友(2):

给你一个汇编的32位的例子

; #########################################################################
.386

.model flat, stdcall
option casemap :none ; case sensitive
; #########################################################################
include f:\masm32\include\windows.inc

include f:\masm32\include\user32.inc
include f:\masm32\include\kernel32.inc
includelib f:\masm32\lib\user32.lib

includelib f:\masm32\lib\kernel32.lib

myabs PROTO :DWORD
; #########################################################################

.data
nValue1 dd 100H

nValue2 dd 8FFFFFFFH
.code
start:

invoke myabs,nValue1

invoke myabs,nValue2

invoke ExitProcess,NULL

; 求ABS的子函数
myabs proc src:DWORD
xor eax,eax
mov eax, DWORD PTR src
test eax, 080000000H
jz POSITIVE
xor eax, 0FFFFFFFFH
inc eax
POSITIVE:
ret
myabs endp

end start