Haga tres pequeñas preguntas utilizando el lenguaje ensamblador de una microcomputadora y pida a los expertos que las respondan.
Segmento de datos
BUF1 db 12, 45, 98, 7, 5, -3, 6, -2, 9, 4, 4, 5, 8, 4, 21, 2, 45, 12, 5, 4, 3, 5, 75, 2, 1, 5, 7, -1
Fin de los datos
Fragmento de código
Inicio:
mov ax, data
mov ds, ax
mov es, ax
lea di, BUF1
mov cx, 65535
mov al, -1
cld
repne scasb; al -(di) == 0, es decir, al = (di) no es un número, es decir, al = (di) salta del bucle, o cx=0 salta del bucle, entonces cuando (di) = -1, salta del bucle
; Si (di) no es igual a -1, entonces cx-1 y continúa el bucle. 4c00h
int 21h
Fin del código
fin inicio
2. segmento
Inicio:
Los bits iguales a 1 se invierten y los bits iguales a 0 permanecen sin cambios
por lo tanto, el 1 en el; los 4 bits superiores se invierten y el 0 de los 4 bits inferiores permanece sin cambios
mov ax, 4c00h
int 21h
el código termina
fin de inicio
segmento de código
segmento de código
inicio
fin de inicio
3.; una subrutina. Encuentre el valor máximo y mínimo de una secuencia de datos de tipo byte sin signo en la memoria.
; La dirección inicial de la secuencia de datos de bytes sin firmar se encuentra en SI,
; Se requiere que el valor máximo se almacene en AH y que el valor mínimo se almacene en AL. El programa principal llama a subprogramas para implementar las funciones anteriores.
Supongamos cs:código, ds:datos
Segmento de datos
NUM db 12, 45, 0, 98, 12, 255, 45, 12, 36 , 88, 54, 12, 36; el valor máximo es 255 (FF), el valor mínimo es 0 (0)
COUNT db $-NUM
Fin de los datos p>
Segmento de código
Inicio:
mov ax, data
mov ds, ax
mov cl, COUNT; El número de datos está en CX
mov si, offset NUM El número de datos está en CX.offset NUM La dirección inicial de esta secuencia de datos de tipo byte sin signo está en SI
mov al, [si]; Suponga que el valor mínimo ahora está en al
mov ah, al ; Suponga que el valor máximo ahora está en al
inc si
lp: cmp al, [si]
jb hecho; si al es menor que [di], entonces al sigue siendo el mínimo, no es necesario cambiar
mov al, [ si]; de lo contrario, [di] es el mínimo, así que asígnalo a al
hecho: cmp ah, [si]
ja done1; di], entonces no es necesario cambiar, sigue siendo el máximo
lp: cmp ah, [si]
ja done1; cambie, sigue siendo el valor máximo o máximo
mov ah, [si]; de lo contrario, [di] es el valor máximo, luego asígnelo a al
done1: inc si p>
loop lp
mov ax, 4c00h
int 21h
el código termina
fin y comienzo
Baidu no es fácil de formatear, agréguelo.
El código en el archivo de código fuente está formateando
PD: si hay algo que no comprende, puede preguntar