二道汇编程序题,急急急急急急~~~~~~~~~~

1.在以block 为首地址的字节单元中,存放了06计算(1)班的学生考试成绩,试编制一程序,利用学生的序号来查表得到该学生的成绩,设学生的序号在number单元,查表结果存入RESULT单元中

2.编一程序段将BUF字节单元中的数拆成高低四位,并且将分离出的高四位和低四位分别放于BUF+1和BUF+2字节单元的低四位上

3.编制一子程序,将AL中一位十六进制数转换为对应的ASCII码并用2号DOS功能显示出来,输入参数:补转换的十六进制数已在AL中
有帮忙写出程序了,谢谢了

这三个程序互不冲突,三合一放在一个程序里面了。

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
Start: push cs
pop ds
push cs
pop es
jmp subject_1
; -----------------------------------------
; 1.在以block为首地址的字节单元中,存放了06计算(1)班的学生考试成绩,试编制一程序,利用学生的序号来查表得到该学生的成绩,设学生的序号在number单元,查表结果存入RESULT单元中
block db 56,69,84,82,73,88,99,63,100,80,70,85,100,90,73,43,60,63,72,88 ; 成绩单
number db 18 ;学生序号
RESULT db ? ;number号学生成绩
subject_1: lea bx,block
mov al,number
xlat ;查表,取得对应序号的学生成绩
mov RESULT,al ;保存成绩
jmp subject_2
; -----------------------------------------
; 2.编一程序段将BUF字节单元中的数拆成高低四位,并且将分离出的高四位和低四位分别放于BUF+1和BUF+2字节单元的低四位上
BUF db 9ah,?,?
subject_2: mov al,BUF
xor ah,ah
mov cx,4
shl ax,cl
shr al,cl
mov BUF[1],ah
mov BUF[2],al
jmp subject_3
; -----------------------------------------
; 3.编制一子程序,将AL中一位十六进制数转换为对应的ASCII码并用2号DOS功能显示出来,输入参数:补转换的十六进制数已在AL中
; 功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码
; 入口:AL
; 出口:AL=转换后的ASCII码
AL_ASCII Proc Near
cmp al,10 ;AL<10?
jb @@To_ASCII ;AL<10,按数字处理
add al,7 ;AL>=10,按大写字母处理
@@To_ASCII: add al,'0' ;转换成相应的数字或大写字母
ret
AL_ASCII EndP
subject_3: mov al,8
call AL_ASCII
mov dl,al
mov ah,2
int 21h
; -----------------------------------------
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-09
1楼给的思路很对!但是第1题用51汇编解答就错了,因为第3题用到DOS功能调用,所以显然楼主说的是8086汇编。
所以......楼主要注意提问方式,要有所界定^-^。
题目都不算难,楼主应该自己做。嘿嘿,我通常不回答这样的问题,我不替人做题。
建议楼主将分数给1楼。
当然,另有其它人替你做题的再说,但我坚持认为那不是帮助你。祝学习愉快本回答被网友采纳
第2个回答  2009-06-09
1:
mov dptr,#block
mov a,#number ;学号
movc a,@a+dptr
mov result,a
block:
db …………
number:
db …………
2:
给你个思路,有的指令不常用记不住,先把buf给到A,然后有指令是低半字节交换,换完以后,在把原来还在高位的,进行高低字节交换(swap)只能在累加器A,在保存到你要的地址里面就OK了!!
3:
没有做过这个!!
相似回答