1248762042 发表于 2021-10-20 21:08:03

汇编的循环结构与子程序结构设计

一、编写一个程序,实现如下功能:
从键盘输入两个整数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数组元素的平均值。
要求用子程序的结构实现,选择适当的参数传递方法。

汇编学的太差了,救命!!!

人造人 发表于 2021-10-20 21:12:51

哪一层的汇编语言?
我可以调用 dos api 吗?
我可以调用 bios api 吗?

1248762042 发表于 2021-10-20 21:14:29

人造人 发表于 2021-10-20 21:12
哪一层的汇编语言?
我可以调用 dos api 吗?
我可以调用 bios api 吗?

dos的吧

人造人 发表于 2021-10-20 21:15:26

1248762042 发表于 2021-10-20 21:14
dos的吧

好的

人造人 发表于 2021-10-20 21:54:54

本帖最后由 人造人 于 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

1248762042 发表于 2021-10-20 22:19:44

人造人 发表于 2021-10-20 21:54


大佬 强啊{:10_297:}, 第二题能讲下思路嘛,应该也能仿照你这个写出来吧

人造人 发表于 2021-10-20 22:43:46

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

1248762042 发表于 2021-10-20 23:00:39

人造人 发表于 2021-10-20 22:43


感谢感谢
页: [1]
查看完整版本: 汇编的循环结构与子程序结构设计