汇编的循环结构与子程序结构设计
一、编写一个程序,实现如下功能:从键盘输入两个整数m和n(视为十进制数,取值范围3-9),m和n中间用空格隔开,根据m和n的数值在屏幕上输出m行n列的星号矩阵。例如,当m=3,n=6时,屏幕上显示:
******
******
******
二、编写一个程序,实现如下功能:
数据段定义如下:
data segment
a db 1,2,3,4,5,6,7,8,9,10
b db 10,20,30,40,50,60,70,80,90,100
c db 15,25,35,45,55,65,75,85,95,105
sum dw 3 dup(0)
average db 3 dup(0)
data ends
数据段中含有3个数组,要求分别计算每个数组中各元素的和,以及平均值。将和以及平均值分别存储在以sum、average为首地址的内存单元里。即:以sum为首地址的内存单元里,依次存储a数组元素的和、b数组元素的和以及c数组元素的和;以average为首地址的内存单元里,依次存储a数组元素的平均值、b数组元素的平均值和c数组元素的平均值。
要求用子程序的结构实现,选择适当的参数传递方法。
汇编学的太差了,救命!!! 哪一层的汇编语言?
我可以调用 dos api 吗?
我可以调用 bios api 吗?
人造人 发表于 2021-10-20 21:12
哪一层的汇编语言?
我可以调用 dos api 吗?
我可以调用 bios api 吗?
dos的吧 1248762042 发表于 2021-10-20 21:14
dos的吧
好的 本帖最后由 人造人 于 2021-10-20 21:56 编辑
assume cs:code
code segment
; int getchar(void);
getchar:
mov ah, 01h
int 21h
xor ah, ah
ret
; int putchar(int ch);
putchar:
push dx
mov dx, ax
mov ah, 02h
int 21h
mov ax, dx
pop dx
ret
; int get_number(void);
get_number:
push bx
push dx
xor dx, dx
L1:
call getchar
cmp ax, '0'
jb L0
cmp ax, '9'
ja L0
mov bx, ax
mov ax, dx
mov dx, 10
mul dx
sub bx, '0'
add ax, bx
mov dx, ax
jmp L1
L0:
mov ax, dx
pop dx
pop bx
ret
start:
call get_number
mov si, ax ; y
call get_number
mov di, ax ; x
mov bx, di
L3:
mov di, bx
L2:
mov ax, '*'
call putchar
dec di
cmp di, 0
jne L2
mov ax, 0dh
call putchar
mov ax, 0ah
call putchar
dec si
cmp si, 0
jne L3
mov ax, 4c00h
int 21h
code ends
end start
人造人 发表于 2021-10-20 21:54
大佬 强啊{:10_297:}, 第二题能讲下思路嘛,应该也能仿照你这个写出来吧
assume cs:code, ds:data
data segment
a db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
b db 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
_c db 15, 25, 35, 45, 55, 65, 75, 85, 95, 105
sum dw 3 dup(0)
average db 3 dup(0)
data ends
code segment
; uint16_t function_sum(uint8_t array[], uint16_t size);
; array: bx
; size: ax
function_sum:
push bx
push dx
push si
mov si, bx
add si, ax
xor dx, dx
xor ax, ax
L0:
mov al,
add dx, ax
inc bx
cmp bx, si
jb L0
mov ax, dx
pop si
pop dx
pop bx
ret
; uint8_t function_average(uint16_t sum, uint16_t size);
; sum:ax
; size: bx
function_average:
push cx
push dx
mov cx, ax
xor dx, dx
div bx
mov ah, ch
pop dx
pop cx
ret
start:
mov ax, data
mov ds, ax
mov bx, offset a
mov ax, 10
call function_sum
mov bx, offset sum
add bx, 0
mov , ax
mov bx, offset b
mov ax, 10
call function_sum
mov bx, offset sum
add bx, 2
mov , ax
mov bx, offset _c
mov ax, 10
call function_sum
mov bx, offset sum
add bx, 4
mov , ax
mov bx, offset sum
add bx, 0
mov ax,
mov bx, 10
call function_average
mov bx, offset average
add bx, 0
mov , al
mov bx, offset sum
add bx, 2
mov ax,
mov bx, 10
call function_average
mov bx, offset average
add bx, 1
mov , al
mov bx, offset sum
add bx, 4
mov ax,
mov bx, 10
call function_average
mov bx, offset average
add bx, 2
mov , al
mov ax, 4c00h
int 21h
code ends
end start
人造人 发表于 2021-10-20 22:43
感谢感谢
页:
[1]