两个程序,
1.从键盘输入10个学生成绩,然后输入一个查询成绩,找出是第几个学生的成绩。
2.将一个16进制的数字输出(字符形式)
提供了用于输入,输出的库。
第一个 想用字符串处理,然后数组的元素+1
include io32.inc
.data
cout dword 0
studentdata byte 256 dup(0),0
num byte 256 dup(0),0
msgtipdis byte '请输入学生成绩',13,0
msgreadstudentdata byte '第1个学生成绩',10,13,0 ;1-9个学生集中处理
msgreadstudentdatas byte '第10个学生成绩',10,13,0 ;10特殊处理
msgselect byte '请输入查找学生的分数',13,10,0
msgselectwin byte '该学生是',0
msgfailure byte '没有找到该学生',13,10,0
.code
start:
mov eax, offset msgtipdis
call dispmsg
mov ecx, 9
mov ebx,offset studentdata
disstudent: ;每次msgreadstudentdata[2]+1,屏幕分别显示1,2,3,4,5,6,7,8,9个学生
mov eax,offset msgreadstudentdata
call dispmsg
mov eax,ebx
call readmsg
inc msgreadstudentdata[2]
add ebx,2
loop disstudent
mov eax,offset msgreadstudentdatas
call dispmsg
mov eax,ebx
call readmsg
;mov eax,offset studentdata
;call dispmsg
mov eax,offset msgselect ;查找学生分数的字符串
call dispmsg
mov eax,offset num;输入需要查找的学生成绩
call readmsg;readmsg接口是 eax=[字符串地址]
mov esi,offset studentdata;studentdata地址给esi
mov edi, offset num;num地址给edi
mov ecx,10;循环10次
again:
inc cout
mov bx,[esi]
mov ax,[edi]
and ax,65535
and bx,65535
cmp ax,bx ;每次比对
je printf
add esi,2
loop again
jmp over
printf:
mov eax,offset msgselectwin
call dispmsg
mov eax,cout
call dispsid
over:
exit 0
end start
;转化16进制
include io32.inc
.data
num1 dword 123ccH
promotmsg byte '16进制数字转化为字符输出.num=123ccH',13,10,0
result byte 'num=',32 dup(0),'H',13,10,0
.code
start:
mov eax,offset promotmsg
call dispmsg
mov eax,num1
mov ecx,8
mov esi,0
shiftfour: ;每次移动4位
rol eax,4 ;循环右移动,每次移动4个位,地位不会丢失
push eax
call changefour
mov result+4[esi],al
pop eax
inc esi
loop shiftfour
mov eax,offset result
call dispmsg
exit 0
changefour:
and eax,0fh
or eax,30h ;‘0’的ascall码值为30H
cmp al,'9'
jbe over
add al,7
over :
ret
end start