loops - 用于查找可整除数的 NASM Assembly x86 循环不起作用
问题描述
编辑: 感谢 Jester,我得到了循环工作,但是应该找到可整除数字的循环总是给我“1”和我正在划分的数字。我在循环内使用 div 错误吗?
编辑2:
程序按预期工作,代码如下。
%include "io.inc"
extern _scanf ; externa za scanf
extern _printf; externa za printf
global _main
section .bss
N resd 1
section .data
vhod db "%d", 0 ; prebrano število
izhod db "%d", 10, 0 ; izpisano število
section .text
_main:
mov ebp, esp; for correct debugging
pushad ; ALPR
push dword N
push dword vhod ;; priprava za branje
call _scanf
add esp, 8 ; iz esp počistimo 8 bitov
mov eax, [N] ; v eax damo N za deljenje
mov ebx, 2 ; v ebx damo 2 za deljenje
sub edx, edx ; spucamo edx, da lahko dobimo pravilni ostanek pri deljenju
div ebx ; edx:eax / ebx
mov [N], eax ; shranimo v N dejansko število iteracij
mov ebx, 0 ; exb register nastavimo na 0
.loopf: ; začetek loopa
inc ebx ; ebx šteje kot iterator, povečamo za 1 na začetku loopa.
mov eax, ebx ; pripravimo eax kot deljenca
mov esi, 9 ; pripravimo esi kot deljitelj
sub edx, edx ; spucamo edx
div esi ; delimo
cmp edx, 0 ;pogledamo če je ostanek pri deljenju 0
jne .skip ; če ni, ne izpisemo
push ebx ; ebx dodamo na sklad
push dword izhod ; priprava za izpis
call _printf ;; izpisemo
add esp, 8 ; počistimo esp
.skip:
cmp ebx, [N], ; primerjamo N in register ebx
jl .loopf ; skok na zacetek loopa, ce je manjse
popad ; pop klic na vse registre
ret ; return
解决方案
推荐阅读
- android - Flutter 中的 FirebaseAuthSettings
- java - 捕获异常后如何保持我的代码运行(Java)
- reactjs - Reactjs - 如何使用useCallback、useMemo 优化性能
- android - 生成 apk 后的动态 google-service.json
- android - 如何使用 BroadcastReciver 从非运行的 android 应用程序启动活动?
- google-home - reportStateAndNotification 是否支持多设备状态报告?
- instagram - 无法获取 Instagram 访问令牌的访问代码
- python - 具有描述符的类如何使用描述符的方法解析其实例属性?
- python - 根据传递的变量更改 HTML 表格中的颜色
- javascript - 电子锻造制造不会建立