汇编程序:求平均成绩(用汇编玩结构体)

求平均成绩

在下面的数据段中,给出了全班3名同学OS、AL、SE、DB课程的成绩,请编程计算出平均成绩,写在 ? 处。

datasg segment
db '201558501111','MMTJAB ',90,100,76,89,?
db '201558501112','ZhangAP ',97,82,79,88,?
db '201558501113','ShaoXL ',77,98,89,91,?
db 4 ;这是课程门数,将要用于作除数,偏移量为75
datasg ends

参考解答:

assume cs:codesg,ds:datasg, ss:stacksg
datasg segment
db '201558501111','MMTJAB ',90,100,76,89,?
db '201558501112','ZhangAP ',97,82,79,88,?
db '201558501113','ShaoXL ',77,98,89,91,?
db 4 ;这是课程门数,将要用于作除数,偏移量为75
datasg ends

stacksg segment stack
dw 0,0,0,0,0,0,0,0
stacksg ends

codesg segment
start: mov ax, stacksg
mov ss, ax
mov sp, 16
mov ax, datasg
mov ds, ax
mov bp, 0 ;基址,bx想用于数据处理了
mov cx, 4 ;外层循环次数

s0: push cx ;保存外层循环数
mov si, 0 ;ds:[bp+si+20]将是要处理的数值,第一科成绩前有20个字节是学号、姓名
mov cx, 4 ;设置内层循环次数
mov ax, 0 ;用于存储累加和,因为4门课总成绩可能会大于256,故用字
s: mov bl, ds:[bp+si+20] ;取成绩,100以内,用字节数据
mov bh, 0 ;为下面一步用字进行加法准备
add ax, bx ;累加总分
add si, 1 ;取下一字节
loop s

div byte ptr ds:[75] ;求均分
mov ds:[bp+si+20], al ;保存均分
add bp, 25 ;下一位同学成绩的基址
pop cx ;恢复外层循环
loop s0

mov ax,4c00h
int 21h
codesg ends
end start

注:在这个程序里,数据存储相当于C语言的结构体(由此体会汇编语言其实也是很强大的!)

struct Student{
char num[12];
char name[8];
char OS;
char AL;
char SE;
char DB;
char aver;
};
struct Student stu[77];

永不止步步 发表于04-20 09:45 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:306117个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号