将字符串source中的内容复制到target中,并显示输出{30h,10h,20h} 2.编程实现:将AS中最大元素和最小元素分别存于Max和Min中
时间: 2024-02-01 19:15:54 浏览: 55
1. 代码实现:
```assembly
.model small
.stack 100h
.data
source db '30h,10h,20h$'
target db 3 dup(0)
.code
main proc
mov ax, @data
mov ds, ax
; 复制字符串
mov si, offset source
mov di, offset target
cld ; 清方向标志位,保证从左往右复制
mov cx, 6 ; 字符串长度,不包括结束符$
rep movsb ; 逐字节复制
; 输出 target 中的内容
mov ah, 09h ; 功能号:输出带换行符的字符串
mov dx, offset target
int 21h
mov ah, 4ch ; 功能号:退出程序
int 21h
main endp
end main
```
2. 代码实现:
```assembly
.model small
.stack 100h
.data
AS db 3, 8, 2, 4, 5, 1, 7, 6, 9 ; 定义数组
Max db 0 ; 存放最大值
Min db 0 ; 存放最小值
.code
main proc
mov ax, @data
mov ds, ax
; 计算最大值和最小值
mov al, AS ; 将第一个元素赋值给 al
mov Max, al ; 初始化 Max
mov Min, al ; 初始化 Min
mov si, offset AS + 1 ; 从第二个元素开始遍历
mov cx, 8 ; 数组长度
loop1:
cmp al, [si] ; 比较 al 和当前元素
jb less ; 如果当前元素小于 al,跳转到 less
mov al, [si] ; 否则将当前元素赋值给 al
mov Max, al ; 将 al 赋值给 Max
jmp next ; 跳转到 next
less:
cmp [si], Min ; 比较当前元素和 Min
jb update ; 如果当前元素小于 Min,跳转到 update
jmp next ; 否则跳转到 next
update:
mov al, [si] ; 将当前元素赋值给 al
mov Min, al ; 将 al 赋值给 Min
next:
inc si ; si 指向下一个元素
loop loop1
; 输出结果
mov ah, 02h ; 功能号:输出字符
mov dl, 'M' ; 输出提示信息“Max: ”
int 21h
mov ah, 02h ; 功能号:输出字符
mov dl, ':' ; 输出冒号“:”
int 21h
mov ah, 02h ; 功能号:输出数字
mov dl, Max ; 输出最大值
add dl, 30h ; 将数字转换为 ASCII 码
int 21h
mov ah, 0ah ; 功能号:输入换行符
int 21h
mov ah, 02h ; 功能号:输出字符
mov dl, 'M' ; 输出提示信息“Min: ”
int 21h
mov ah, 02h ; 功能号:输出字符
mov dl, ':' ; 输出冒号“:”
int 21h
mov ah, 02h ; 功能号:输出数字
mov dl, Min ; 输出最小值
add dl, 30h ; 将数字转换为 ASCII 码
int 21h
mov ah, 0ah ; 功能号:输入换行符
int 21h
mov ah, 4ch ; 功能号:退出程序
int 21h
main endp
end main
```
说明:
- 第一个程序中,使用 rep 指令逐字节复制字符串,并使用 DOS 中断 21h 功能号 09h 输出带换行符的字符串。
- 第二个程序中,使用循环计算数组中的最大值和最小值,并使用 DOS 中断 21h 功能号 02h 输出结果。其中,将数字转换为 ASCII 码的方法是给它加上 ASCII 码表中的 30h(即十进制的 48)。
阅读全文