用yii框架做的网站如何搭建,附近旅游团地址电话怎么搜索,高端设计网站都有哪些,一站式网站建设平台一、实验目的
掌握比较综合性的汇编程序设计流程#xff0c;以及多分支情况下程序的设计技巧。
二、实验内容
设计程序统计学生数学成绩。分别归类90-99分、80-89分、70-79分、60-69分及60分以下#xff0c;并将各段的人数及成绩存入对应的内存单元中#xff0c;并在屏幕…一、实验目的
掌握比较综合性的汇编程序设计流程以及多分支情况下程序的设计技巧。
二、实验内容
设计程序统计学生数学成绩。分别归类90-99分、80-89分、70-79分、60-69分及60分以下并将各段的人数及成绩存入对应的内存单元中并在屏幕上显示。
三、程序清单
CRLF MACROMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21H
ENDMDATA SEGMENT ;数据段成绩区
DATA1 DB 89H,92H,74H,85H,96H,73H,62H,78HDB 49H,59H,97H,66H,84H,81H,79H,67HDB 90H,88H,76H,82H,71H,69H,84H,81HDB 79H,65H,94H,86H,76H,82H,75H,83H
DA90 DB 16 DUP (0) ;首字节为人数,随后为成绩
DA80 DB 16 DUP (0)
DA70 DB 16 DUP (0)
DA60 DB 16 DUP (0)
DA50 DB 16 DUP (0)
KKK EQU DA90 - DATA1 ;总人数
DATA ENDSCODE SEGMENT
MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:DATA
START: PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,DATA1 ;SI 指向成绩表首MOV CX,KKK ;循环数(总人数)送 CX
LOOP1: MOV AL,[SI] ;将成绩按字节送入ALCMP AL,90HJNC KK90 ;成绩 90 转CMP AL,80HJNC KK80 ;成绩 80 转CMP AL,70HJNC KK70 ;成绩 70 转CMP AL,60HJNC KK60 ;成绩 60 转LEA DI,DA50 ;不及格区首地址送 DIJMP TTT
KK60: LEA DI,DA60 ;60分区首地址送 DIJMP TTT
KK70: LEA DI,DA70 ;70分区首地址送 DIJMP TTT
KK80: LEA DI,DA80 ;80分区首地址送 DIJMP TTT
KK90: LEA DI,DA90 ;90分区首地址送 DI
TTT: MOV BL,[DI] ;BL 存放人数地址INC BL ;该段人数1MOV [DI],BL ;存该段人数MOV AL,[SI]XOR BH,BHMOV [DIBX],AL ;成绩存入该段INC SI ;修改地址指针LOOP LOOP1LEA SI,DA90CALL DISPL ;显示 90 - 99分人数及成绩LEA SI,DA80CALL DISPL ;显示 80 - 89分人数及成绩LEA SI,DA70CALL DISPL ;显示 70 - 79分人数及成绩LEA SI,DA60CALL DISPL ;显示 60 - 69分人数及成绩LEA SI,DA50CALL DISPL ;显示 60分以下人数及成绩RETDISPL PROC NEAR ;子程序:显示某段人数及成绩MOV BL,[SI] ;取人数MOV AL,BLMOV CL,10CBW ;符号扩展指令AL的内容扩展到AH,形成AX中的字。;如果AL的最高有效位是0则AH 00AL的最高有效位为1则AH FFH。AL不变。即将AL的符号位移至AHDIV CL ;8位除法被除数放在AX中除数为8位在CL中;AL存储除法操作的商即十位AH存储除法操作的余数即个位MOV DX,AXADD DL,30H ;将十位加30H转换为ASCII码后面类似MOV AH,02 ;调用INT 21H中断的2号功能进行显示输出输出字符存在DL中INT 21H ;显示十位MOV DL,DHADD DL,30HMOV AH,02INT 21H ;显示个位MOV DL,20H ;空格的ASCII码MOV AH,02INT 21H ;显示空格
DISP1: INC SI ;指向下一单元MOV DL,20HMOV AH,02INT 21HMOV DL,[SI] ;取成绩MOV CL,04ROL DL,CLAND DL,0FHADD DL,30HMOV AH,02INT 21H ;显示十位MOV DL,[SI]AND DL,0FHADD DL,30HMOV AH,02INT 21H ;显示个位DEC BLJNZ DISP1CRLF ;回车换行RET
DISPL ENDPMAIN ENDP
CODE ENDSEND START四、实验过程
1用编辑器建立源文件D101-4.ASM 2用汇编程序MASM.EXE对源文件进行汇编产生目标文件再用连接程序LINK产生可执行文件 3使用调试工具DEBUG进行程序调试 先用U命令反汇编以便了解指令地址。显示结果如下具体调试结果见第五部分。
五、实验结果分析
1程序调试及结果 使用U命令查看汇编指令可以看到共有32个成绩需要统计。 使用-d ds:0查看成绩内存区存放情况使用-G 12指令执行到从成绩内存区读取成绩指令可以看到第一个成绩为89如下 使用-t指令单步运行程序因为第一个成绩为89所以在第一次比较时跳转不成立在第二次比较时跳转成立跳转到KK80标号处如下 使用-g 51指令执行到将该成绩存入80分区内存地址段再使用-d ds:0进行查看成绩区内存情况可以看到此时80分区人数已经变为1且此人成绩为89如下 依次类推将源地址指针SI进行加1指向下一个成绩字节再进行循环操作按照比较、跳转、取相应分区首地址、人数累加、存放成绩的流程进行操作按照该流程循环成绩总数32次以后成绩区内存如下 由上图可以看出90分以上有5人80-90分有0B11人70-80分有9人60~70分有5人不及格成绩有2人分别为49分和59分。
最后再调用显示子程序DISPL对各分区人数及成绩进行打印该子程序采用SI寄存器进行传参参数为相应分区首地址其内部核心思想为利用除法和调用INT 21H中断分别显示人数、成绩的十位和个位如下。 至此整个实验完成。
2分析总结
首先本次实验的重点在于掌握成绩的读取、判断分区、存放以及寄存器的调整其中有个小技巧就是通过人数的增加刚好可以索引到当前成绩应该存放的位置该小技巧的使用使得程序简洁明了值得在今后的编程中借鉴。此外本实验用到了变址寄存器寻址应该对该部分加以理解。
其次该实验中碰到几个比较生疏的指令如符号扩展指令CBW其功能是将AL的内容扩展到AH,形成AX中的字如果AL的最高有效位是0则AH 00AL的最高有效位为1则AH FFH。AL不变也就是将AL的符号位移至AH中。程序中在显示数据时通过8位除法指令DIV来分别依次显示人数、成绩的十位和个位对于8位除法操作其被除数放在AX中除数为8位在CL中最终结果是AL存储除法操作的商即十位AH存储除法操作的余数即个位。此外该实验也用到了INT 21H中断的2号功能进行显示输出其参数输出字符存在DL中该显示操作也比较方便后续可以借鉴。