汇编语言程序设计求无符号字节序列中最大值和最小值。设有n字节序列,存放在数据段buf中,利用子程序的方法编程求出该序列的最大值和最小值
很抱歉,无法提供流程图。但是,我可以给出一个通用的思路,并提供一个实现示例。
思路: 1. 初始化寄存器,将buf的首地址存入SI,将0存入BX(用于记录最小值),将FFH存入CX(用于记录最大值) 2. 进入循环,每次循环将SI所指地址的字节与BX、CX分别进行比较,更新最小值和最大值 3. 每次循环将SI加1,以进行下一次比较 4. 循环结束后,最小值存储在BX中,最大值存储在CX中
示例代码:
.DATA
buf BYTE 4AH,23H,7BH,13H,2AH,66H,1BH,38H,56H
min BYTE ?
max BYTE ?
.CODE
main PROC
mov SI,OFFSET buf ; 将buf首地址存入SI
mov BX,0 ; 将0存入BX,初始化最小值
mov CX,0FFH ; 将FFH存入CX,初始化最大值
mov DL,[SI] ; 将buf首字节存储在DL中
check:
cmp DL,BL ; 比较当前字节与最小值
jl updateMin ; 如果小于最小值,更新最小值
cmp DL,CL ; 比较当前字节与最大值
jg updateMax ; 如果大于最大值,更新最大值
inc SI ; 指向下一个字节地址
mov DL,[SI] ; 将下一个字节存储在DL中
cmp SI,OFFSET buf+8 ; 如果已比较完8个字节,退出循环
je endLoop
jmp check ; 继续比较下一个字节
updateMin:
mov BL,DL ; 将当前字节存储在BL中,更新最小值
jmp check ; 继续比较下一个字节
updateMax:
mov CL,DL ; 将当前字节存储在CL中,更新最大值
jmp check ; 继续比较下一个字节
endLoop:
mov min,BL ; 将最小值存储在min中
mov max,CL ; 将最大值存储在max中
; 此处可以加入输出最小值和最大值的代码
; 例如:mov DL,min ; 将min读入DL
; call writeDec ; 以十进制形式输出
; mov DL,',' ; 输出逗号
; call writeChar ; 输出单个字符
; mov DL,max ; 将max读入DL
; call writeDec ; 以十进制形式输出
; call crlf ; 输出回车换行
; 注意:writeDec/writeChar是本人自定义的输出子程序,具体实现略
; 可以根据需要使用其他输出方法
exit ; 程序结束
main ENDP
END main