Red de conocimiento informático - Material del sitio web - Cómo utilizar el lenguaje ensamblador para realizar operaciones de suma decimal de varios dígitos

Cómo utilizar el lenguaje ensamblador para realizar operaciones de suma decimal de varios dígitos

Ingresa 2 valores decimales con no más de 10 dígitos (los dígitos son variables) desde el teclado, suma la suma y muestra el resultado.

Cuando el programa se está ejecutando, te solicita que ingreses el número a. agregar y el número que se agregará Buscar Después de sumar y mostrar los resultados, la pantalla continúa y sale.

El segmento de código asume cs: código, ds: código

org 100h; formato COM estándar

inicio:

mov ax, 3 ; modo texto

int 10h

push cs

pop ds

push ds

pop es

Otra vez:

lea dx, mes1; aviso

mov ah, 9

int 21h

mov di, 30fh

entrada de llamada; recibir número A

lea dx, mes2; aviso

mov ah, 9

int 21h

mov di, 31fh

Entrada de llamada; recibir número B

Conteo de llamadas

lea dx, mes3

mov ah, 9

int 21h

; *** Resultado decimal de salida***

Llamar a crt

lea dx, mes4

mov ah, 9

int 21h

mov ah, 0; pausa

int 16h

cmp ah, 15h; "Y(y)" continuar

jz De nuevo; calcular la siguiente pregunta

mov ah, 4ch; end

int 21h

entrada :

mov cx, 10

T1: mov ah, 0; recibir número

int 16h

cmp al, 0dh

p>

jz ok

cmp al, '0'; verificación de datos

jb T1

cmp al, '9'

ja t1

sí:

mov ah, 0eh; muestra datos válidos

int 10h

w2: presionar hacha; para apilar

bucle T1

ok: mov bp, cx

inc bp

mov cx, 11

sub cx, bp

std

jcxz u3

u1: pop ax

stosb

bucle u1

u3: mov al, '0'

mov cx, bp

u2: stosb

bucle u2

ret

count: mov si, 30fh

mov di, 31fh

xor dx, dx clear feed

mov cx; , 11; cambie este valor para agregar números muy grandes

T3: llame a subs_c; acumule poco a poco

dec si

dec di

bucle T3

p>

bucle T3

ret

count: mov si, 30fh ret

subs_c:; [Original] Subrutina central de adición de varios bits

mov al, [si]; alineación del bit más bajo

mov ah, [di]

y ax, 0f0fh

add al, ah ; selfadd

agregar al, dl;

aam; bisect ten

mov dl, ah; guardar bit de redondeo

o al, 30h

mov [SI], al; guarda 1 bit y valor, copia incorrecta aquí.

ret

crt:cld

xor pb, pb

mov si, 305h

mov cx, 10

cr3:

mov al, [si]

cmp al,'0'

jnz cr0

inc bp

inc si

bucle cr3

cr0:

mov cx, 11

sub cx, pb

mov si, 305h

ad si, pb

cr1: lodsb

mov ah, 0eh

int 10h

bucle cr1

ret

mes1 db 0dh, 0ah, 09, 'Entrada A (0-9, 999, 999, 999): $'

mes2 db 0dh, 0ah, 09, 'Entrada B (0- 9, 999, 999, 999): $'

mes3 db 0dh, 0ah, 09, 'Suma A B= $'

mes4 db 0dh, 0ah, 09, 'Continuar Y (y)?$'

Fin del código

fin inicio