1. 有下面的一组学生成绩数据,编程序求出Tomy同学的总分,最后结果存放在AX中
nam
'Tomy'
'John'
'Mary'
'Jone'
c
78
82
75
92
asm
66
79
95
87
math
78
93
74
100
chinese
90
78
56
63
提示:Tomy同学的总分是138H。
代码:
assume cs:code,ds:data
data segment;数据段的开始
nam db 'Tomy','John','Mary','Jone' ;十六个字节用来存储姓名
c dw 78, 82, 75, 92;用八个字节来存储C成绩
asm dw 66, 79, 95, 87;八个字节来存储asm成绩
math dw 78, 93, 74, 100;八个字节来存储math成绩
chinese dw 90, 78, 56, 63;八个字节来存储Chinese成绩
data ends;数据段的结束
code segment;代码段的开始
start:
mov ax,data;把数据段开始的段地址存入AX
mov ds,ax;把AX中的数据存入DS
mov bx,16;把16存入BX中,即作为成绩开始的偏移地址
mov ax,0;把AX置为零
mov cx,4;循环次数为四次
s: add ax,[bx];把DS:[BX]处的数值与AX中的数值相加存入AX
add bx,8;BX中的数据与8相加并存入BX
loop s ;循环从s开始
mov ax,4c00h
int 21h;程序返回
code ends;代码段结束
end start;程序结束
2.计算,其中、两组数据中的所有数均为80以内的正数。要求在程序中必要处要写上注释。
代码:
assume cs:code,ds:data1
data1 segment ;数据段data1存放X
db 12,16,18,12,4,7,8,16
data1 ends ;data1结束
data2 segment ;数据段data2存放Y
db 3,11,7,9,15,17,7,1
data2 ends ;data2结束
code segment;代码段的开始
dw 0 ;此处存放求和结果
start: ;代码开始
mov ax,data1;把data1开始的段地址存放在AX
mov ds,ax;把AX中的数据存入段寄存器DS
mov ax,data2;把data2开始的段地址存放在AX
mov es,ax;把AX中的数据存入段寄存器ES
mov ax,0;把0存入AX
mov bx,0;把0存入BX
mov cx,8;把8存入CX
s: mov dx,0;把0存入DX
mov dl,ds:[bx];把ds:[bx]处的字节型数据存入DL
add dx,dx;DX中的数与DX相加存入DX
add ax,dx;DX中的数与AX相加存入AX
mov dl,es:[bx];把es:[bx]处的字节型数据存入DL
add ax,dx;DX中的数与AX相加存入AX
inc bx;BX中的数据加1存入BX
loop s;循环从s开始
mov cs:[0],ax;把AX中的数据存到CS:[0]处
mov ax,4c00h
int 21h;程序返回
code ends;代码段结束
end start;程序结束