关于数组地址的问题

temanw 2020-06-10 08:17:27
输入四名学生的三门成绩,输出平均值的程序。
代码如下

.MODEL SMALL
.STACK 100H
.DATA
NUM DW 3

SCORES DW 4 DUP (?)
DW 4 DUP (?)
DW 4 DUP (?)
;定义3*4的二维数组用于存储成绩

AVG DW 4 DUP (?)
;AVG数组存储平均成绩

.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX

XOR BX,BX ;初始化BX
@IN_ROW:
MOV AH,2
MOV DL,'?'
INT 21H ;输出问号

MOV CX,4 ;存储循环次数4
XOR SI,SI ;初始化SI
@IN_CLN:
CALL INDECM ;调用INDECM输入程序

MOV SCORES[BX][SI],AX ;把输入的数字存到数组里
ADD SI,2 ;地址寄存器加2
LOOP @IN_CLN ;循环

MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H ;回车

ADD BX,8 ;BX加8(因为继续循环SI会被清零)

CMP BX,24
JL @IN_ROW ;如果BX小于24就继续IN_ROW
MOV SI,6 ;地址寄存器加6
@REPEAT:
MOV CX,3 ;记录循环次数3
XOR BX,BX ;BX清零
XOR AX,AX ;AX清零
@SUM:
ADD AX,SCORES[BX][SI] ;把SCORES[BX][SI]的值给AX
ADD BX,8 ;BX加8也就是到了下一行
LOOP @SUM ;循环三次

XOR DX,DX ;DX初始化
DIV NUM ;做除法NUM=3
MOV AVG[SI],AX ;把结果存到AVG数组里
SUB SI,2 ;地址寄存器SI加2
JNL @REPEAT ;如果进位位不被置位就跳转REPEAT

MOV CX,4 ;记录循环次数4
XOR SI,SI ;SI清零
@OUTPUT:
MOV AX,AVG[SI] ;把要输出的存放到AX里
CALL OUTDECM ;调用OUTDECM

MOV AH,2
MOV DL,' '
INT 21H ;回车

ADD SI,2 ;地址寄存器加2
LOOP @OUTPUT ;继续循环

MOV AH,4CH
INT 21H
MAIN ENDP
INCLUDE INDECM.ASM
INCLUDE OUTDECM.ASM
END MAIN

INDECM和OUTDECM就不贴出来了就是输入和输出的


我的疑问是:在@IN_CLN的最后一行SI被存了6,然后@SUM的第一行相当于是SCORES[0][6],这里我知道它是想把这个二维数组的每行的第一个数字相加,那如果SCORES[0][6]是代表第一个数字的话,在最前面@IN_CLN的第二行MOV SCORES[BX][SI],AX 。为什么是从0开始的呢(此时BX和SI都是0)
然后我又想了想,SCORES前面有一个数组NUM是DW 3的,刚好6个地址,那为什么前面是从0开始,后面就要从6开始了呢。。
...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2020-06-11
  • 打赏
  • 举报
回复
是这个作用。紫薯布丁
temanw 2020-06-11
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
看代码,好像是 3 个人的 4 科成绩,输入时是输入各人的每科成绩,后面求平均是每科的平均;求平均时,是从最后一科往前算的,所以开始是 si=6(指向第一人的最后一科成绩),后面循环时 si 每次减 2。 人,科成绩,也可对调了理解,看题目吧。
嗷嗷,懂了。我傻了~ 然后我还想问 就在一个程序里,他调用了一个程序假设@A: 然后这个@A里面执行了 PUSH BX PUSH CX PUSH DX PUSH SI 然后最后又执行了 POP SI POP DX POP CX POP BX 他的目的是为了这个程序执行以后,不影响BX CX DX SI的值 对吗
zara 2020-06-11
  • 打赏
  • 举报
回复
看代码,好像是 3 个人的 4 科成绩,输入时是输入各人的每科成绩,后面求平均是每科的平均;求平均时,是从最后一科往前算的,所以开始是 si=6(指向第一人的最后一科成绩),后面循环时 si 每次减 2。
人,科成绩,也可对调了理解,看题目吧。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧