Red de conocimiento informático - Conocimiento del nombre de dominio - ¡¡¡Buscamos ansiosamente el código fuente en lenguaje ensamblador!!!

¡¡¡Buscamos ansiosamente el código fuente en lenguaje ensamblador!!!

; Título: Encuentra números primos hasta 100

; Código fuente: /question/129790890.html

;

Referencias:; /p>

; Este programa está compilado, depurado y se ejecuta correctamente en el entorno integrado MASMPlus 1.2.

Segmento de código

Asumir CS: código, DS: código

----- ---------- --- ------- ---------- --

Función: Mostrar la cadena de la dirección especificada (Str_Addr)

; / p>

; Str_Addr = dirección de cadena (debe estar en el segmento de datos)

; Método de uso: Salida Str_Addr

Ejemplo de uso: Salida PromptStr

Salida MACRO Str_Addr

push ax

lea dx, Str_Addr

mov ah, 9

int 21h

hacha pop

EndM

--------- ---------- ---------- - -- -----

; Función: Generar un carácter

; Entrada: dl=carácter a mostrar

Output_Chr proc Near

empujar hacha

mov ah, 02h

int 21h

pop hacha

ret

Output_Chr endp

; ---------- ---------- -------

; Función: Línea de retorno del carro de salida Feed

Output_CTLF proc Cerca

empujar hacha

empujar dx

mov ah, 02h

mov dl, 0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop hacha

ret

Output_CTLF endp

------- ---------- ----------

Función: convierte el número binario sin signo en AX a un código ASCII decimal claro y lo envía a la pantalla de visualización

; Entrada: AX = número binario

; >; Salir: muestra el número ASCII convertido en la posición actual del cursor

Dec_ASCII Proc Near

push dx

push bx

push di

mov bx, 10

lea di, @@Temp_Save[6]

mov BYTE ptr [di], '$'

dec di

@Divide: xor dx, dx

div bx

o dl, 30h

mov [di], dl

dec di

test ax, 0ffffh

jnz @@Divide

inc di

push di

pop dx

mov

ah, 9

int 21h

pop di

pop bx

pop dx

ret

@@Temp_Save db 7 dup(?)

Dec_ASCII EndP

------- ---------- --- -------

Función: Retrasar el número especificado de tics de reloj

; Entrada:

; segundo 18,2 ticks, aproximadamente 182 ticks en 10 segundos. Si el tiempo de retraso no es diez veces mayor que el número de segundos, el error será ligeramente mayor)

Cerca del programa de retraso

Empujar. dx

Push cx

xor ax, ax

int 1ah

mov cs: @@Times, dx

mov cs.@@Times[2], cx

Read_Time: xor ax, ax

int 1ah

sub dx, cs: @@Times.

sbb cx, cs: @@Times[2]

cmp dx, Didas

jb Read_Time

pop cx

pop dx

ret

@@Times dw 0, 0

Delay EndP

--- -- ----- --- ---------- ----

; Determinar primo

; Parámetro de entrada: AL=un entero sin signo hasta 256

; Parámetros de retorno: si AL es un número primo, establezca el indicador de redondeo; de lo contrario, borre el bit

El proceso de estimación está cerrado

Empuje si

Push cx

Push ax

lea si, PrimeLess

cmp al, 1

jz @@ Not_Prime; 1 no es un número primo

mov cx, 4

@@Less_Prime: cmp al, [si]

jz @@Yes_Prime 2, 3, 5, 7 son números primos

inc si

loop @@Less_Prime

test al, 1

jz @@Not_ Primos; los números pares distintos de 2 no son primos

lea si, PrimeLess[1]

mov cx, 3

@@Divide357: push ax

div BYTE ptr [si]

prueba ah, ah

jnz $ 5

pop ax

jmp @ @Not_Prime

hacha pop

inc si

bucle @@Divide357

jmp $ 5

@@ Not_Prime: clc; no primo, borrar bandera de redondeo

p>