汇编语言实验报告(三个小题).doc
文本预览下载声明
实验6—1
该程序的功能为将一个十进制的数转换成十六进制的数。程序先将十位数和个位数分离出来,然后再对十位数进行处理,把个位数加上,便将一个两位数的十进制数转换成十六进制。
程序如下:
DATA SEGMENT
BCDBUF DB 65H
BINBUF DB ?
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AL,BCDBUF
CALL TRAN
MOV BINBUF,AL
MOV CL,04H ;显示代码的开头
MOV DL,BCDBUF
AND DL,0F0H
SHR DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BCDBUF ;这里可以改BINBUF
AND DL,0FH
ADD DL,30H
MOV AH,02H
INT 21H ;显示代码的结束
RET
MAIN ENDP
TRAN PROC NEAR
PUSHF
PUSH BX
PUSH CX
MOV AH,AL
AND AH,0FH
MOV BL,AH
AND AL,0F0H
MOV CL,04H
ROR AL,CL
MOV BH,0AH
MUL BH
ADD AL,BL
POP CX
POP BX
POPF
RET
TRAN ENDP
CODE ENDS
END START
在屏幕显示的代码如上注释。
运行结果如下:
要是显示的是经过转换的数字,则在“MOV DL,BCDBUF ;这里可以改BINBUF”这一行改成“MOV DL, BINBUF ”便可以显示“41”。
实验6—2
该程序的功能为将三个数组ARY1,ARY2和ARY3分别进行求和,求和的方式为调用子程序,用BX将参数带入子程序中,这些参数都是变量的地址,这样就可以更好的控制变量的变化。
程序如下:
DATA SEGMENT
ARY1 DW 1,2,3,4,5,6,7,8,9,10
COUNT1 DW ($-ARY1)/2
SUM1 DW ?
ARY2 DW 10,20,30,40,50,60,70,80
COUNT2 DW ($-ARY2)/2
SUM2 DW ?
ARY3 DW 100,200,300,400,500,600
COUNT3 DW ($-ARY3)/2
SUM3 DW ?
TABLE DW 3 DUP(?)
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV TABLE,OFFSET ARY1
MOV TABLE+2,OFFSET COUNT1
MOV TABLE+4,OFFSET SUM1
LEA BX,TABLE
CALL ARY_SUM
MOV TABLE,OFFSET ARY2
MOV TABLE+2,OFFSET COUNT2
MOV TABLE+4,OFFSET SUM2
LEA BX,TABLE
CALL ARY_SUM
MOV TABLE,OFFSET ARY3
MOV TABLE+2,OFFSET COUNT3
MOV TABLE+4,OFFSET SUM3
LEA BX,TABLE
CALL ARY_SUM
//; MOV DL,3
//;AGAIN:
MOV CL,0CH ;显示部分的开头
MOV DX,SUM1
AND DX,0F000H
SHR DX,CL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DX,SUM1
MOV CL,08H
AND DX,0F00H
SHR DX,CL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DX,SUM1
MOV CL,04H
AND DX,00F0H
SHR DX,CL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DX,SUM1
AND DX,000FH
ADD DL,30H
MOV AH,02H
INT 21H
//; DEC DL
//; CMP DL,0
//; JG AGAIN ;HERE
MOV CL,0CH
显示全部