燕山大学微机原理作业8.docx
微型计算机原理与应用作业作业组别:第八组班级:12级机控2班:吴东升学号:1项目指导教师:艳文、庆玲、玉勤、王志松 朱学军、王鑫、子明项目完成2015年5月25日目录作业一1一、题目分析描述与要求1二、存放器与贮存的应用说明1三、程序框图2四、详细程序2五、程序调试的情况、程序运行的结果的分析5作业二5一、题目的分析描述与要求5二、存放器与主存等的应用说明5三、程序框图6四、详细程序6五、程序的调试情况、程序运行的结果的分析9作业三9一、题目的分析描述与要求9二、存放器与贮存等的应用说明9三、程序框图10四、详细程序11五、程序的调试情况、程序运行的结果的分析13作业一一、题目分析描述与要求输入“*,字变量NUMA中的数分别 与字变量NUMB中的数无符号相乘,结果存入双字变量NUMC。输入“/,NUMA中的数分别与NUMB中的数无符号相除,结果存入双字变量NUMC商在前,余数在后。二、存放器与贮存的应用说明在编写程序过程中,用到了AX,BX,DX,SI四个存放器。AX常作为累加器,使用频率最高,用于算术运算、逻辑运算以与与外 设传送信息等。BX常作为基址存放器,用来存放存储器地址。DX常作为数据存放器,常用来存放双字长数据的高16位或存放外设端口地址SI是源地址存放器。DI是目的存放器。程序运行过程中,共使用了3种寻址方式。立即数寻址,如mov ah,09h;存放器寻址,如mov,bl,al;存放器间接寻址,如mov ax,word ptr numasi。三、程序框图四、详细程序.MODEL SMALL.STACK.DATANUMA DW 1010H, 2011H, 3012H, 4013H, 5060HCOUNT EQU ($-NUMA)/2NUMB DW 0090H, 0081H, 0066H, 003AH, 004CHNUMC DD COUNT DUP (?)ERROR DB 0DH, 0AH, 'ERROR!$'.CODE.STARTUP mov si,0 mov di,0 mov cx,count ;设置循环次数 mov ah,01h ;调用DOS 01号功能输入一个字符 int 21h cmp al,'*' ;假设为*跳转fun0 je fun0 cmp al,'/' je fun1 ;假设为/跳转fun1 jmp fun2 ;都不是跳转fun2 fun0: mov ax,numasi mov bx,numbsi mul bx ;字乘法高位存在DX,低位存在AX mov word ptr numcdi,ax ;低位存在双字的第四位 add di,2 ;di加2 mov word ptr numcdi,dx ;高位存在双字的高字节 add si,2 ;si加2 add di,2 ;di加2 loop fun0 ;完毕循环 jmp next ;跳转NEXT fun1: mov dx,0 mov ax,numasi mov bx,numbsi div bx ;字除法,余数存在DX,商存在AX mov word ptr numcdi,ax ;商存在双字的低四位 add di,2 ;di加2 mov word ptr numcdi,dx ;余数存在双字的高四位 add si,2 ;si加2 add di,2 ;di 加2 loop fun1 ;完毕循环 jmp next ;跳转next fun2: ;显示错误 mov ah,09h mov dx,offset error int 21h next:.EXITEND五、程序调试的情况、程序运行的结果的分析结果调试正确,能够正确的将数组之中的数依次做无符号乘法与无符号除法,并且运行结果正确,没有需要改良的地方。作业二一、题目的分析描述与要求存source存入十个字节数,要求其用十六进制数显示包含H,每行显示一个。二、存放器与主存等的应用说明 在编写程序过程中,用到了AX,BX,CX,DX,SI五个存放器。AX常作为累加器,使用频率最高,用于算术运算、逻辑运算以与与外 设传送信息等。BX常作为基址存放器,用来存放存储器地址。CX常作计数器,作为循环和串操作等指令中的隐含计数器。DX常作为数据存放器,常用来存放双字长数据的高16位或存放外设端 口地址。SI是源地址存放器。程序运行过程中,共使用了3种寻址方式。立即数寻址,如mov ah,09h;存放器寻址,如mov dl,bh;存放器间接寻址,如mov bh,si。三、程序框图四、详细程序.MODEL SMALL.STACK.DATASOURCE DB 23H, 19H, 1AH, 2AH, 15H, 3CH, 81H, 98H, 1AH, 2DHCOUNT EQU $-SOURCECRLF DB 0DH, 0AH, '$'.CODE.STARTUP mov cx,count ;设置循环次数cx=10 mov si,offset source ;si取source的偏移地址again: mov bh,si ;sibh push bx ; bx cx 入栈保护 push cx mov cl,4 ;cl=4 shr bh,cl ;逻辑右移4位 即取字的十六进制第一位数 add bh,30h ;字的十六进制第一位数对应的ASCII码 mov dl,bh ;DOS 02号输出字符功能调用,设置入口参数 mov ah,02h int 21h pop bx ;bx 出栈 mov bh,si ;sibh shl bh,cl ;逻辑左移4位 shr bh,cl ;逻辑右移4位 即取字的十六进制第二位数 cmp bh,09h ;bh与09h比拟 jg fun0 ;大于跳转funo jmp fun1 ;不大于跳转fun1 fun0: add bh,37h ;bh加37h字的十六进制第二位数对应的ASCII码 mov dl,bh ;DOS 02号输出字符功能调用,设置入口参数 mov ah,02h int 21h jmp next fun1: add bh,30h ;bh加30h字的十六进制第二位数对应的ASCII码 mov dl,bh ;DOS 02号输出字符功能调用,设置入口参数 mov ah,02h int 21h jmp next next: mov dl,48h ;DOS 02号输出字符功能调用,设置入口参数,输出H mov ah,02h int 21h mov dx,offset crlf ;回车换行 mov ah,09h int 21h pop cx ;cx出栈 inc si ;si+1 loop again .EXITEND五、程序的调试情况、程序运行的结果的分析 程序运行根本正确,能够将十个数据每行显示一个正确显示出来,不足需要改良处,设置循环次数为十次,但实际运行了二十次才终止程序。作业三一、题目的分析描述与要求存source中存放着16个十六进制的数组,另一个字变量L,要求将L作为逻辑尺寸对数组SOURCE进展如下处理:假设L的第i位为0,那么数组的第i位数不变;假设L的第i位为1,那么数组的第i个数取反,处理结果存在result处。二、存放器与贮存等的应用说明在编写程序过程中,用到了AX,BX,DX,SI四个存放器。AX常作为累加器,使用频率最高,用于算术运算、逻辑运算以与与外设传送信息等。BX常作为基址存放器,用来存放存储器地址。DX常作为数据存放器,常用来存放双字长数据的高16位或存放外设端口地址SI是源地址存放器。DI是目的存放器。程序运行过程中,共使用了2种寻址方式。立即数寻址,如mov cl,10h;存放器间接寻址,如mov bx,si。三、程序框图四、详细程序.MODEL SMALL.STACK.DATAL DW 1239HSOURCE DW 139CH,89C6H,5437H,8819H,5678H,1234H,3333H,4444H,20ABH,3947H,3855H,3744H,34DEH,5555H,6666H,7777HCOUNT EQU ($-SOURCE)/2RESULT DW COUNT DUP (?).CODE.STARTUP mov ax,l ;L存入AX mov cx,count ;设置循环次数 mov dl,0 ;dl清零 mov si,offset source ;si取source的偏移地址 mov di,offset result ;di取result的偏移地址 again: mov bx,si ;【si】存入BX push ax ;AX CX入栈保护 push cx mov cl,10h ;cl=10h inc dl ;dl加一 sub cl,dl ;cl减DL shl ax,cl ;逻辑左移cl位 mov cl,0fh ;cl=15 shr ax,cl ;逻辑右移15位 cmp ax,01h ;AX与1比拟 je fun0 ;等于1跳转fun0 jmp next ;等于0跳转next fun0: not bx ;取反 next: mov di,bx ;BX存入di add si,2 ;si加2 add di,2 ;di 加2 pop cx ;cx ax出栈 pop ax loop again ;完毕循环.EXITEND五、程序的调试情况、程序运行的结果的分析 程序运行正确,能够准确的判断出L的第i位的数值,并能能对数组的第i进展处理,结果保存入result中,达到了预期的目的,无需进展改良。