使用子程序分离偶数和质数的汇编语言程序。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用子程序分离偶数和质数的汇编语言程序。相关的知识,希望对你有一定的参考价值。
我希望生成一个汇编语言程序,从一个给定的数字列表中分离出偶数和质数.该程序应该使用子程序,堆栈和间接寻址模式。
我所尝试的是
.model small
.data
num db 0,13,4,7,8,9,14,15,2,10,19,20
even dw 20 dup ?
prime dw 20 dup ?
.code
mov ax, @ data
mov ds, ax
LEA BX,num
LEA SI, even
LEA DI, prime
mov dh,02
L1:
mov ah,00
mov al, [BX]
mov dl, al
div dh
cmp ah,00
JE EVEN
EVEN:
mov [SI], dl
INC SI
INC BX
LOOP L1
由于我是一个汇编语言的初学者,我希望知道上述要求的正确代码。任何帮助将是感激的。
答案
该程序应该使用子程序,堆栈和间接寻址模式。
然后你的程序必须做的是在 数目 数组,并调用2个子程序,一个找出这个数字是否是质数,一个找出这个数字是否是偶数。目前你几乎得到了一个很好的循环,要不是你忘记初始化了 CX
登记 LOOP
指令依赖!
这已经是一个很好的循环了。
lea bx, num
lea si, even
lea di, prime
mov cx, 12 ; There are 12 numbers in the 'num' array
L1:
mov al, [bx]
call TestForEven
call TestForPrime
inc bx
loop L1
你测试一个数字是否为偶数时,用的是2的除法 这是个浪费的解决方案!你要做的就是检查数字的最低位是否为0。
TestForEven:
test al, 1 ; This tests the lowest bit
jnz NotEven
mov [si], al ; Adding to the 'even' array
inc si
NotEven:
ret
这里有一些技巧来完成任务。
- {fnTahomafs10bord0shad01cH00FFFF}Like @Michael 在他的评论中写道,你应该有 甚至 和 首要的 数组定义为字节。
如果发现任何数字是偶数,那么它也不能是质数。这意味着你可以调用 TestForPrime 从内部 TestForEven 而不是从主循环中调用)。
TestForEven: test al, 1 ; This tests the lowest bit jnz NotEven mov [si], al ; Adding to the 'even' array inc si ret NotEven: call TestForPrime ret
因为这个内嵌调用现在已经变成了所谓的尾部调用,所以这个
call
指令已经不需要了。TestForEven: test al, 1 ; This tests the lowest bit jnz TestForPrime mov [si], al ; Adding to the 'even' array inc si ret TestForPrime: ... ret
如果你在这个论坛(或谷歌)上搜索,你一定会找到测试质数的好方法。好猎奇...
以上是关于使用子程序分离偶数和质数的汇编语言程序。的主要内容,如果未能解决你的问题,请参考以下文章
C语言程序(输入两个数 a b 求ab之间的质数并且输出所有质数之和)