在内部RAM的40H单元开始 存有48个无符号数,试编程找出最小值,并存入80H单元。
时间: 2023-05-20 07:01:25 浏览: 175
以下是一个可能的解决方案:
ORG 0x0000
start:
; 初始化变量
mov r0, #48 ; 数组长度
mov r1, #40 ; 数组起始地址
mov r2, #255 ; 最小值初始值为255
loop:
; 比较当前值和最小值
ldrb r3, [r1], #1 ; 读取数组元素
cmp r3, r2
bhi skip ; 如果当前值大于等于最小值,跳过
mov r2, r3 ; 更新最小值
skip:
; 继续循环或者结束
subs r0, r0, #1
bne loop
; 存储最小值
mov r0, #0x80
strb r2, [r0]
end:
; 程序结束
b end
这是一个简单的汇编程序,用于查找一个数组中的最小值,并将其存储在指定的内存地址中。程序首先初始化变量,然后进入一个循环,逐个比较数组元素和当前最小值。如果当前值小于最小值,则更新最小值。最后,程序将最小值存储在指定的内存地址中。
相关问题
设有一数据区有10个无符号数的字节数据(如55,78H,43,19,0,1,10,80H,0FFH,100),位于数据段偏移地址为1000H开始的10个内存单元中。编写程序找出其中的最大数和最小数,分别存入BH和BL;然后求其中最大值和最小值的平均值,存入AL。 要求:将求最大最小值设计为子程序,并画出子程序流程图;在主程序里调用该子程序、求平均值,并绘制主程序流程图。
首先,我们需要设计一个子程序来找出其中的最大值和最小值。下面是该子程序的流程图:
其中,用寄存器AL存储最小值,用寄存器BL存储最大值。
接下来,我们可以编写主程序,在其中调用该子程序,并求出最大值和最小值的平均值。下面是主程序的流程图:
其中,用寄存器AH存储最大值和最小值的平均值。
下面是完整的汇编代码:
assume cs:code, ds:data
data segment
arr db 55,78H,43,19,0,1,10,80H,0FFH,100
data ends
code segment
start:
mov ax, data
mov ds, ax
; 调用子程序求最大值和最小值
call find_min_max
; 求平均值
mov ah, 0
add al, bl
adc ah, 0
add al, bh
adc ah, 0
mov bx, 2
div bx
; 结束程序
mov ah, 4ch
int 21h
find_min_max proc
; 初始化最小值为255,最大值为0
mov al, 255
mov bl, 0
; 循环比较每个数
mov cx, 10
lea si, arr
cmp_loop:
mov dl, [si]
cmp dl, bl
jg max_update
cmp dl, al
jl min_update
jmp next
max_update:
mov bl, dl
jmp next
min_update:
mov al, dl
next:
inc si
loop cmp_loop
ret
find_min_max endp
code ends
end start
设有一数据区有10个有符号数的字节数据(如55,78H,43,-19,0,1,10,80H,0FFH,100),位于数据段偏移地址为1000H开始的10个内存单元中。编写程序找出其中的最大数和最小数,分别存入BH和BL;然后求其中最大值和最小值的平均值,存入AL。 要求:将求最大最小值设计为子程序,并画出子程序流程图;在主程序里调用该子程序、求平均值,并绘制主程序流程图。
子程序流程图:
┌───┐
│Start│
└───┘
│
│
▼
┌─────────┐
│LoadData │
└─────────┘
│
│
▼
┌──────────┐
│FindMaxMin │
└──────────┘
│
│
▼
┌────────────┐
│StoreMaxMin │
└────────────┘
│
│
▼
┌───────┐
│Return │
└───────┘
主程序流程图:
┌───┐
│Start│
└───┘
│
│
▼
┌─────────┐
│Call Sub1 │
└─────────┘
│
│
▼
┌──────────┐
│CalculateAL│
└──────────┘
│
│
▼
┌───────┐
│Return │
└───────┘
下面是汇编代码:
ORG 1000H
data SEGMENT
db 55H, 78H, 43H, -19, 0, 1, 10, 80H, 0FFH, 100
data ENDS
code SEGMENT
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
; 调用子程序找最大最小值
call FindMaxMin
; 计算平均数
mov bl, bh ; 将最大值复制到BL
sub bl, al ; BL = 最大值 - 平均数
mov bh, al ; 将平均数存入BH
add bh, bl ; BH = 平均数 + (最大值 - 平均数)
mov al, bh ; 将BH存入AL
; 结束程序
mov ax, 4c00h
int 21h
; 查找最大最小值
FindMaxMin:
; 初始化变量
mov si, 0 ; si指向第一个数
mov bh, -128 ; 将BH初始化为最小值
mov bl, 127 ; 将BL初始化为最大值
find_next:
cmp si, 10 ; 检查是否检查完毕
je return
mov al, [si] ; 获取当前数
cmp al, bh ; 检查是否是最小值
jl update_min
cmp al, bl ; 检查是否是最大值
jg update_max
jmp next
update_min:
mov bh, al ; 存储最小值
jmp next
update_max:
mov bl, al ; 存储最大值
jmp next
next:
inc si ; si指向下一个数
jmp find_next
return:
ret
code ENDS
END start
相关推荐
















