Programación en lenguaje ensamblador: encuentre el número máximo en una matriz, encuentre el número de números negativos en una matriz (es mejor anotar algunas declaraciones importantes)
1. Encuentra el número máximo en la matriz
SEGMENTO DE DATOS
max dw 14h, 65h, 454h, 9h, 87, 248
num dw $-max
LOS DATOS TERMINAN
SEGMENTO DE CÓDIGOS
ASUME CS: CÓDIGOS, DS: DATAS
proc.principal lejos
p>INICIO:
push ds
mov ax, 0
push ax
MOV AX, DATAS
MOV DS, AX
mov si, offset max; envía la primera dirección de la matriz a si para que si pueda usarse para operar la matriz
> mov ax, num; calcula la matriz El número controla el número de ciclos
mov cl, 2
div cl
mov cx, ax
mov bx, 0
siguiente:
empujar bx; empujar a la pila, proteger datos
empujar cx
mov bx, [si]
llamar a salida; llamar a una subrutina y generar los datos en la matriz
mov dl, 32; generar un espacio
int 21h
pop cx
pop bx
cmp bx, [si]; juzgue y compare para encontrar el valor máximo
jl dig
jmp l1
dig:
mov bx,[si]
l1:
agregar si,2
bucle siguiente
llamada crlf; retorno de carro y salto de línea
salida de llamada valor máximo
ret
main endp
output proc near ; es una subrutina que convierte números binarios en bx a hexadecimal
mov cl, 4
mov di, 4 p>
shift:
rol bx, cl
mov ax, bx
y al, 0fh
cmp al, 09h
jg l2
añadir al, 30h
jmp l3
l2: añadir al, 37h
l3: mov dl, al
mov ah, 2
int 21h
dec di
jnz shift
ret
salida endp
crlf proc near; subrutina para retorno de carro y avance de línea<
/p>
mov dl, 0dh
mov ah, 2
int 21h
mov dl, 0ah
mov ah , 2
int 21h
ret
crlf endp
CÓDIGOS FINALIZA
FIN principal
2. Encuentre el número de números negativos en la matriz
SEGMENTO DE DATOS
matriz DW 12H, 14, -5, -10H, 33, 40, 48, -22. , - 32, 10H
NDATA DW 10 DUP(0)
N DW 0
EXTREMOS DE DATOS
SEGMENTO DE CÓDIGO
ASUME CS:CODE, DS:DATA
proc. principal lejos
INICIO: push ds
mov ax, 0
push ax
MOV AX, DATA
MOV DS, AX
mov cx, 10
mov si, matriz de desplazamiento p>
l1: mov bx, [si]
push cx
salida de llamada; genera los datos en la matriz
mov dl, 32
int 21h
pop cx
agregar si, 2
bucle l1
MOV BX, 0 p>
MOV SI, 0
MOV DI, 0
MOV CX, 10
SIGUIENTE: MOV AX, ARRAY[BX]
TEST AX, 8000H; Determinar si es un número negativo
JZ L
INC N; Cuente el número de números negativos
MOV NDATA; [DI], AX p>
AÑADIR DI, 2
L: AÑADIR BX, 2
BUCLE SIGUIENTE
MOV DL, 0AH
MOV AH, 2
INT 21H
MOV DL, 0DH
MOV AH, 2
INT 21H
MOV DX, N
AÑADIR DL, 30H
MOV AH, 2
INT 21H
ret
extremo principal
salida
proc cerca
mov cl, 4
mov di, 4
shift:
rol bx, cl
mov ax, bx
y al, 0fh
cmp al, 09h
jg l2
añadir al, 30h
jmp l3
l2: añadir al, 37h
l3: mov dl, al
mov ah, 2
int 21h
dec di
jnz shift
ret
salida endp
CÓDIGO FINALIZA
FIN principal