汇编上机实验(2)

2018-11-27 19:06

BEGIN: MOV DX,LIST[BX] CMP AX,DX JA LP

MOV LIST[BX+2],DX LP1: sub BX,2 LOOP BEGIN

LP: MOV LIST[BX+2],AX ADD LIST,1

MOV AX,4C00H INT 21H CODE ENDS END START

2、试用子程序实现以下要求。

题目:从键盘接收若干个一位十进制数值(0~9),并以十进制数据形式显示其和。 要求:(1)用子程序实现一位十进制数值的输入; (2)当用户未输入数值,直接回车时,结束输入;

(3)输出的数据为多位十进制数据,而机器内部计算的和是十六进制形式,需要进行 数制转换,然后以字符串的形式输出结果; (4)程序中要求有必要的提示信息。 例如:用户在提示信息下输入三个数值: Please input a number:5 Please input a number:3 Please input a number:4 程序显示运算结果 The sum is:12

3、试用子程序改进以上题目。

题目:从键盘接收若干个N位的十进制数值(0~65535),并以二进制、十进制、十六进制三种数制形式显示其和(假定多个数据和不超过65535)。

要求:(1)用子程序实现一个N位十进制数值的输入,在主程序的循环结构中调用该子程序;

(2)当用户未输入数值,直接回车时,结束输入;

(3)输出的数据为多位十进制数据,而机器内部计算的和是十六进制形式,需要进行数制转换,然后以十进制字符串的形式输出结果; (4)程序中要求有必要的提示信息。 例如:用户在提示信息下输入三个数值: Please input a number:15 Please input a number:30 Please input a number:45 程序显示运算结果

The sum is:0101 1010B 90D 5AH

程序如下:

DATA SEGMENT

X DW 0

NUM DB 6, ? ,6 DUP('$')

STR1 DB \STR2 DB \

sumB DB 20,0,20 DUP('$') sunD DB 20,0,20 DUP('$') sumH DB 20,0,20 DUP('$') DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX , DATA MOV DS , AX CALL INPUTNUM LEA DX,STR2 ;输出结果 MOV AH,09H INT 21H CALL getTwo ;二进制表示 CALL getTen ;十进制 CALL getSixtin ;十六进制表示 MOV AX , 4C00H INT 21H

;功能,多个多位十进制数的输入,并且实现了这几个数的数值相加 ;实际上这个是两个循环嵌套, ;入口参数:NUM

;出口参数:X (X是多个数据相加之后的和,字数据,之后可以除以2、10、16,依次转化相应进制)

INPUTNUM PROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI AGAIN: LEA DX,STR1;提示输入信息 MOV AH,09H INT 21H LEA DX,NUM MOV AH,0AH INT 21H CALL CHANGE CMP NUM[2],0DH JZ exit ;初始化操作,以下内嵌套的循环是要将接受的多位十进制数转化为与之相对应的值 mov si,0 ;串指针初始化 mov bx,10 ;基数10,乘数 mov ax,0 ;累加结果初值 mov cl,num+1 mov ch,0 ;cx是循环的次数 jcxz LP1 ;若串长度为0,直接跳过此内循环 LP: mul bx mov dl,num[si+2] sub dl,30h mov dh,0

add ax,dx inc si loop LP LP1: add x,ax JMP AGAIN ;外循环,接收多个数据 exit:POP SI POP DX POP CX POP BX POP AX RET

INPUTNUM ENDP ;名字:CHANGE ;功能:回车换行 CHANGE PROC PUSH DX PUSH AX

MOV DL,0AH MOV AH,2 INT 21H

MOV DL,0DH MOV AH,2 INT 21H POP DX POP AX RET

CHANGE ENDP

;功能:将二进制数输出 ;入口参数:X ;出口参数: getTwo PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV CX,2 MOV BX,2 MOV AX,X MOV sumB[1],0 LP: MOV DX,0 DIV CX MOV sumB[BX],DL INC BX INC sumB[1];记录长度 CMP AX,0 JA LP ;倒序输出 XOR CX,CX MOV CL,sumB[1] MOV BX,CX AGAIN:

MOV DL,sumB[BX+1] ADD DL,30H MOV AH,02H INT 21H

;回车换行 ;商在AX,余数在DX中 DEC BX LOOP AGAIN MOV DL,'B' MOV AH,02 INT 21H MOV DL,' ' MOV AH,02 INT 21H POP DX POP CX POP BX POP AX RET getTwo ENDP

;功能:将十进制数输出 ;入口参数:X ;出口参数: getTen PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV CX,10 MOV BX,2 MOV AX,X MOV sunD[1],0 LP: MOV DX,0 DIV CX MOV sunD[BX],DL INC BX INC sunD[1];记录长度 CMP AX,0 JA LP ;倒序输出 XOR CX,CX MOV CL,sunD[1] MOV BX,CX AGAIN: MOV DL,sunD[BX+1] ADD DL,30H MOV AH,02H INT 21H DEC BX LOOP AGAIN MOV DL,'D' MOV AH,02 INT 21H MOV DL,' ' MOV AH,02 INT 21H POP DX

;商在AX,余数在DX中

POP CX POP BX POP AX RET getTen ENDP

;功能:将十六进制数输出 ;入口参数:X ;出口参数: getSixtin PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV CX,16 MOV BX,2 MOV AX,X MOV sumH[1],0 LP: MOV DX,0 DIV CX MOV sumH[BX],DL INC BX INC sumH[1];记录长度 CMP AX,0 JA LP ;倒序输出 XOR CX,CX MOV CL,sumH[1] MOV BX,CX AGAIN: MOV DL,sumH[BX+1] CMP DL,9 JA NEXT ADD DL,30H MOV AH,02H INT 21H JMP theEnd NEXT: ADD DL,37H MOV AH,02H INT 21H theEnd: DEC BX LOOP AGAIN MOV DL,'H' MOV AH,02 INT 21H POP DX POP CX POP BX POP AX RET getSixtin ENDP CODE ENDS

;商在AX,余数在DX中 END START


汇编上机实验(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:心跳呼吸骤停预案及演练脚本

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: