gpt4 book ai didi

linux nasm程序集查找变量中保存的位数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:52 27 4
gpt4 key购买 nike

我正在编写一个程序来打印从 0 到 100 的所有数字,我需要找到一个变量(在本例中为变量 counter)包含的位数。

这是我的代码:

SECTION .data
len EQU 32

SECTION .bss
counter resd len
digit1 resd len
digit2 resd len
digit3 resd len

SECTION .text
GLOBAL _start
_start:
nop

Print:
mov eax, 4
mov ebx, 1
mov ecx, counter
mov edx, len
int 80h

Set:
mov BYTE [counter], 1

Divide:
; HERE IS WHERE I NEED TO FIND THE LENGTH OF THE VARIABLE COUNTER
; initial division
mov ax, [counter] ; number we want to print
mov ch, 10 ; we divide by ten to siphon digits
div ch ; divide our number by 10

; al now has 11, ah has 1
mov dh, ah ; save the remainder in dh
xor ah,ah
mov ch, 10 ; refill ch with the divisor
div ch ; al now has 1, ah now has 1

Move: ; now to move our digits to a printable state
mov [digit1], dh ; first digit is in edx
mov [digit2], ah
mov [digit3], al

Adjust:
add BYTE [digit1], '0'
add BYTE [digit2], '0'
add BYTE [digit3], '0'

Print:
mov eax, 4
mov ebx, 1
mov ecx, digit1
mov edx, len
int 80h

mov eax, 4
mov ebx, 1
mov ecx, digit2
mov edx, len
int 80h

mov eax, 4
mov ebx, 1
mov ecx, digit3
mov edx, len
int 80h

Exit:
mov eax, 1
mov ebx, 0
int 80h

我需要找到长度,以便我知道要划分多少次以及打印变量计数器的位数。

我怎么知道它有多长?

提前致谢

最佳答案

对于 0..100 范围内的数字,我只是在边界处进行比较,使用如下伪汇编程序:

    mov ax, [counter]

mov cx, 3 ; default length
cmp ax, 100 ; >= 100, use 3
bge done

dec cx ; set length to 2
cmp val, 10 ; >= 10, use 2
bge done

dec cx ; set length to 1

done:
; cx now holds the digit count.

这实际上最多可以处理 999 个,但如果您想扩大范围,您还可以在 100 个之前添加更多条件检查。

关于linux nasm程序集查找变量中保存的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12880093/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com