ARM汇编求正数负数个数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM汇编求正数负数个数相关的知识,希望对你有一定的参考价值。
用ARM代码啊
这里没人回答的,别人上班的哪有功夫回答问题。
ARM汇编分很多种的,首先ARM公司的编译器就和GNU的开源编译器不一样,如果你搞移动平台当然要选GNU的了,ios和安卓的底层汇编都是这个风格。
ARM还分 ARM汇编、thumb 汇编
现在cortex -a 都是thumb-2
ARMV6和ARMV7的指令集都不一样,最新的ARMv8更不一样。
我这个是ARMV7-M指令集,手机上A8、A9是ARMV7指令集,
虽然差了各-M但是一不一样,-M有除法指令
fushu: .int 2,3,5,3,-1,-2,-4,-7,-8,-133,-444
shiyan:
ldr r0, = fushu
mov r2, # 11
bl fushugeshu
sub r7, # 8
ldr r0, [r7] @ r0 = 负数个数
ldr r1, [r7, # 4] @ r1 = 正数个数
b tiaochushiyan
fushugeshu: @ 入口r0=数组地址 r2=数据个数
push r0-r6,lr
mov r5, # 0
mov r6, r5
mov r7, sp
sub sp, sp, # 8
ldr r3, = 0x8000000
chongfu:
ldr r4, [r0], # 4
tst r4, r3
ite ne
addne r5, # 1
addeq r6, # 1
subs r2, # 1
bne chongfu
str r5, [sp]
str r6, [sp, # 4]
add sp, # 8
pop r0-r6,pc
tiaochushiyan:
b tiaochushiyan
参考技术A it怎么写复数8086汇编求最小公约数(输入支持正数负数,支持5位整数,有提示信息)
stack segment stack
db 512 dup(?)
stack ends
data segment
string1 db 'Enter the first number M:', 0ah, 0dh, '$'
string2 db 'Enter the first number N:', 0ah, 0dh, '$'
string3 db 'The greatest common divisor(GCD) of M and N is:', 0ah, 0dh, '$'
data ends
code segment
assume ds: data, cs: code, ss: stack
start:
mov ax, stack
mov ss, ax
mov ax, data
mov ds, ax
lea dx, string1
mov bh, ah
mov ah, 09h
int 21h
mov ah, bh
push ax
call far ptr readsiw
lea dx, string2
mov bh, ah
mov ah, 09h
int 21h
mov ah, bh
push ax
call far ptr readsiw
push ax
call far ptr gcd
lea dx, string3
mov bh, ah
mov ah, 09h
int 21h
mov ah, bh
call far ptr dispsiw
call far ptr lineFeed
jmp done
readsiw proc far
push bx
push cx
push dx
xor bx, bx
xor cx, cx
mov ah, 1
int 21h
cmp al, '+'
jz rsiw1
cmp al, '-'
jnz rsiw2
mov cx, -1
rsiw1:
mov ah, 1
int 21h
rsiw2:
cmp al, '0'
jb rsiw3
cmp al, '9'
ja rsiw3
sub al, 30h
xor ah, ah
shl bx, 1
mov dx, bx
shl bx, 1
shl bx, 1
add bx, dx
add bx, ax
jmp rsiw1
rsiw3:
cmp cx, 0
jz rsiw4
neg bx
rsiw4:
mov ax, bx
pop dx
pop cx
pop bx
ret
readsiw endp
dispsiw proc far
push ax
push bx
push dx
test ax, ax
jnz dsiw1
mov dl, '0'
mov ah, 2
int 21h
jmp dsiw5
dsiw1:
jns dsiw2
mov bx, ax
mov dl, '-'
mov ah, 2
int 21h
mov ax, bx
neg ax
dsiw2:
mov bx, 10
push bx
dsiw3:
cmp ax, 0
jz dsiw4
xor dx, dx
div bx
add dl, 30h
push dx
jmp dsiw3
dsiw4:
pop dx
cmp dl, 10
je dsiw5
mov ah, 2
int 21h
jmp dsiw4
dsiw5:
pop dx
pop bx
pop ax
ret
dispsiw endp
lineFeed proc far
push ax
push dx
mov dl, 0dh
mov ah, 2
int 21h
mov dl, 0ah
mov ah, 2
int 21h
pop dx
pop ax
ret
lineFeed endp
gcd proc far
push bp
mov bp,sp
push si
push di
mov si,word ptr [bp+6]
mov di,word ptr [bp+8]
jmp short @2@58
@2@58:
mov ax,si
cwd
idiv di
mov si,dx
mov ax,dx
xor di,ax
mov ax,di
xor si,ax
mov ax,si
xor di,ax
jne short @2@58
mov ax,si
jmp short @2@114
@2@114:
pop di
pop si
pop bp
ret
gcd endp
done:
mov ax, 4c00h
int 21h
code ends
end start
以上是关于ARM汇编求正数负数个数的主要内容,如果未能解决你的问题,请参考以下文章
用arm的汇编语言,求1到50的累加和,记住是arm下的汇编语言
8086汇编求最小公约数(输入支持正数负数,支持5位整数,有提示信息)