8086汇编语言 随机给一些字母寻找最大和最小值
时间: 2023-11-28 17:49:20 浏览: 67
以下是8086汇编语言的程序,用于随机生成一些字母并寻找最大和最小值:
```
DATA SEGMENT
LETTERS DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
NUM_LETTERS DB 10
LETTER_ARR DB 10 DUP(?)
MAX DB ?
MIN DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; generate random letters
MOV CX, NUM_LETTERS
MOV SI, 0
GENERATE_LETTERS:
; generate a random index into the letters array
CALL RANDOM_NUM
MOV DL, AL
AND DL, 1FH ; mask out all but the lower 5 bits
MOV BH, 0
MOV BL, LETTERS[DL] ; load the letter from the array
MOV LETTER_ARR[SI], BL ; store the letter in the array
INC SI
LOOP GENERATE_LETTERS
; find the max and min letters
MOV CX, NUM_LETTERS
MOV SI, 0
MOV MAX, LETTER_ARR[SI] ; initialize max to first letter
MOV MIN, LETTER_ARR[SI] ; initialize min to first letter
FIND_MAX_MIN:
CMP LETTER_ARR[SI], MAX ; check if current letter is greater than max
JG UPDATE_MAX
CMP LETTER_ARR[SI], MIN ; check if current letter is less than min
JL UPDATE_MIN
INC SI
LOOP FIND_MAX_MIN
; output results
MOV AH, 02H ; set up to print characters
MOV DL, MAX
INT 21H ; print max letter
MOV DL, MIN
INT 21H ; print min letter
MOV AH, 4CH ; exit to DOS
INT 21H
; generates a random number between 0 and 31
RANDOM_NUM:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX, 1000H ; set up delay loop
DELAY_LOOP:
DEC CX
JNZ DELAY_LOOP
MOV AH, 2CH ; get system time
INT 21H
MOV BX, DX ; BX = DX:AX
MOV CX, 31 ; set divisor for divide instruction
DIV CX ; divide BX by CX, result in AX
POP DX
POP CX
POP BX
POP AX
RET
CODE ENDS
END START
```
该程序使用一个名为 LETTERS 的字节字符串来存储所有可能的字母。它使用 RANDOM_NUM 子程序来生成一个介于 0 和 31 之间的随机数,该数字用作 LETTERS 数组的索引以选择一个字母。它存储每个生成的字母在名为 LETTER_ARR 的字节数组中。然后,它迭代 LETTER_ARR 数组以找到最大和最小值,并将它们存储在 MAX 和 MIN 变量中。最后,它使用 DOS 中断 21H 功能 02H 来打印最大和最小字母。
阅读全文