微机程序报告
微机实验报告
微机实验报告第⼀次实验1.写出完成下列功能的指令序列(1)传送20H到AL寄存器MOV AL , 20H(2)将(AL)*2 MOV AL , 02H MUL AL (3)传送25H到BL寄存器MOV BL , 25H (4)(AL)*BL MUL BL问最后结果(AX)=?AX=0940H2.分别写出完成下列指令要求的指令(1)将BX的低4位清零AND BX , F0H(2)将AX的⾼4位置1 OR AX , F0H(3)将DX的低4位取反;XOR DX , 0FH(4)将CX的中间⼋位清零AND CX , 0FF0H(5)将AX中与BX中的对应位不相同的位均置1 XOR AX , BX3.上机运⾏下⾯指令序列,分析运⾏后(AX)=?mov cl , 8sar ax ,cldec axmov cx ,8mul cxax=210.9h4. 4.设DS=当前段地址,BX=0300H,SI=0002H,请⽤DEBUG的命令将存储器偏移地址300-304H连续单元装⼊0AH0BH0CH0DH0EH。
在DEBUG状态下送⼊下⾯的程序,并⽤单步执⾏的⽅法,分析每条指令原源地址的形成过程?当数据传送完毕时,AX中的内容是什么?8.编程:求两个数的平均值。
这两个数分别放在X单元和Y单元中,⽽平均值放在Z单元中。
即Z=(X+Y)/2 data segmentx db 2y db 6z db ?data endscode segmentassume cs:code, ds;datastart:mov ax, datamov ds,axmov al, xmov ah,0add al,ymov bl,2div blint 21hcode endsend start9.输⼊下⾯源程序,并对程序进⾏会变,连接,调式并说明程序的功能。
data segment number dw 0168hdata endscode segmentassume cs;code, ds: dataorg 0100hstart:mov ax, datamov ds, axmov dx,0mov bx, 0001hmov di, 8000hmov si, 0mov ax, numbermov cx, 16next;test ax, bxjz continueor dx, diinc sicontinue:ror di, 1mov ah,4chint 21hcode endsend start1.编写程序: 求1+2+3+…..+100的和data segment number db 01hdata endscode segmentassume cs:code , ds:datastart:mov ax , datamov ds , axmov ax , datamov bx , numbermov ax , 0mov cx , 64hnext:add ax ,bxinc bxloop nextmov ah , 4chint 21hcode endsend start2.在内存中tab为⾸的地⽅存有1-9的平⽅值,从键盘输⼊⼀个数(1-9),将该数存⼊X单元,⽴⽅值存⼊XXX单元中data segmenttab db 0,1,4,9,16,25,36,49,64,81x db 10dup(?)xxx db 10dup(?)data endscode segmentassume cs:code ,ds: datastart:mov ax ,datamov ds , ax mov ax , datamov cx ,09hnext:mov ah , 1int 21hand ah ,0fhmov bx ,ahmov si , offset tabmov sp , offset xmov di , offset xxxmov dx , byte ptr[bx+si]mov al, blmul dxmov [bx+di] ,axmov [sp+bx] , bxmov ah , 4chint 21hcode endsend start第⼆次实验顺序程序设计从键盘输⼊两个1位⼗进制数,求这两个数的和,并将结果显⽰在屏幕上data segment infor1 db 'please input the first data (<10):$'infor2 db 0ah,0dh,'please input the second data (<10):$'infor3 db 0ah,0dh,'the result is:$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset infor1mov ah,9int 21hmov ah,1int 21hand al,0fhmov ah,00000000000000000000mov bl,almov dx,offset infor2int 21hmov ah,1int 21hand ax,000fhadd al,blaaaor ax,3030hpush axmov dx,offset infor3 mov ah,9int 21hpop axmov dl,ahpush axmov ah,2int 21hpop axmov dl,almov ah,2int 21hmov ah,4chint 21hcode endsend startresult db 0ah,0dh,'cube result is :$' data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset numbermov ah,9int 21hmov ah,1int 21hand ax,000fhmov bx,axmul blmul blmov cl,64hdiv clor al,30hpush axmov dx,offset resultmov ah,9int 21hpop axmov dl,alpush axmov ah,2int 21hpop axmov cl,0ahmov al,ahmov ah,0div clor ax,3030hpush axmov ah,2int 21hpop axmov dl,ahmov ah,2int 21hmov ah,4chint 21hcode endsend start分⽀程序设计1.某程序可从键盘接收命令(0-5),分别专项6个⼦程序,⼦程序⼊⼝地址分别为p0-p5,编制程序,⽤跳转表实现分⽀结构程序设计,记录实验结果data segmentmessage db 'please input key (0-5):$'crmessage db 0ah,0dh,'$'errormessage db 'you hit error key !',0ah,0dhdb 'please try again(0-5):$'message0 db 'you hit the key 0',0ah,0dh,'$'message1 db 'you hit the key 1',0ah,0dh,'$'message2 db 'you hit the key 2',0ah,0dh,'$'message3 db 'you hit the key 3',0ah,0dh,'$'message4 db 'you hit the key 4',0ah,0dh,'$'message5 db 'you hit the key 5',0ah,0dh,'$'code segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov ah,9lea dx,messageint 21htryagain:mov ah,1int 21hmov bl,almov ah,9mov dx,offset crmessage int 21hcmp bl,'0'jz key0cmp bl,'1'jz key1cmp bl,'2'jz key2cmp bl,'3'jz key3cmp bl,'4'jz key4cmp bl,'5'jz key5error:mov ah,9mov dx,offset errormessage int 21hjmp tryagainkey0:lea dx,message0mov ah,9int 21hjmp exitkey1:lea dx,message1 mov ah,9int 21hjmp exitkey2:lea dx,message2 mov ah,9int 21hjmp exitkey3:lea dx,message3 mov ah,9int 21hjmp exitkey4:lea dx,message4 mov ah,9int 21hjmp exitkey5:lea dx,message5 mov ah,9int 21hexit:mov ah,4chint 21hcode endsend start第三次实验循环程序设计1.从⾃然数1开始累加,直到累加和⼤于1000为⽌,统计被累加的⾃然数的个数,并把统计的个数送⼊N单元,把累加和送⼊SUM单元。
微机原理实验报告清零程序
竭诚为您提供优质文档/双击可除微机原理实验报告清零程序篇一:微机原理实验报告微机原理与应用课程实验报告实验分工:报告人同组人实验时间:20XX.12.10课程设计一、题目要求(1)在数据段首址为0100h开始的内存区1按从大到小的顺序顺次存入二进制数15~0共16个字节的数据;(2)将上述源区内容传送到目的内存区2(首址为1100h)中;(3)检验上述传送过程是否正确,如有错误,在紧跟内存区2后的第一个字节开始写入AscII码“eRRoR”,否则写入“oK”。
(4)用冒泡法将上述内存区2的数据,按从小到大的次序重新排列,排列后存放在内存区3(开始地址为2100h)。
(5)将上述内存区2和内存区3的第100个数据分别乘以2,并转为bcD码,保存在各自存储区的末尾。
再将上述两个bcD码相乘,其结果保存在内存区1的末尾处。
二、实验程序框图三、程序代码codesegmentassumecs:codeDATA1db16dup(?)DATA2dbeRRoRDATA3dboK;在数据段首址为0100h开始的内存区1按从大到小的顺序顺次存入二进制数15~0共16个字节的数据start:movax,0100h;规定目标程序存放单元的偏移量movds,ax;数据段地址moves,axmovsi,offsetDATA1;偏移地址movcx,0010h;循环次数movbx,0100hmoval,ofhs1:movcs:[si],almov[bx],cs:[si]incsiincbxdecalloops1nop;将内存区1数据搬移到内存区2中movcx,16movsi,0100hmovbx,1100hs2:moval,[si]mov[bx],alincbxloops2nop;对比内存区1的数据与内存区2的数据是否相同mov cx,16movsi,0100hmovbx,1100hcomp:movax,[si]movdx,[bx]cmpax,dxjneerroincsiincbxloopcomp;数据如果都相同,说明上述传输过程正确movsi,offsetDATA3movdi,1110hmovbl,0movcx,2enteroK:movbl,cs:[si]mov[di],blincsiincdiloopenteroKnopjmps3;如果有一个数据不相同,说明上述传输过程不正确err:movsi,offsetDATA2movdi,1110hmovbl,0movcx,5entereRR:movbl,cs:[si]mov[di],blincdiloopentereRR;将内存区2数据搬移到内存区3中s3:movsi,1100hmovcx,0010hmovbx,2100hmoval,0movcx,16fil:moval,[si]mov[bx],alincsiincbxloopfilnop;用冒泡法将内存区3的数据按从小到大重新排列s4: movbl,0movcx,16movsi,2110hdecsideccxagain:moval,[si]cmpal,[si-1]jaenextxchgal,[si-1]mov[si],almovbl,1next:decsiloopagaincmpbl,0jnestart1nopmovsi,1109hmoval,[si]movcl,2mulcl;结果在al中movdx,0movbx,10divbxshlal,4addal,dl;把二进制数转换成bcD码mov[1112h],almovsi,2109hmoval,[si]movcl,2mulcl;结果在al中movdx,0movbx,10divbxshlal,4addal,dl;把二进制数转换成bcD码mov[2110h],al;两个bcD码相乘,其结果保存在内存区1的末尾处。
上海大学微机实践报告4-6
上海大学微机实践报告实验四:D/A转换器实验【实验目的】了解D/A转换的基本原理,掌握DAC0832芯片的性能、使用方法及对应的硬件电路。
【实验内容】编写程序,要求输出锯齿波、三角波及方波,分别用示波器观察波形;如有能力,把三段程序编在一起,循环输出三种波形。
【实验区域电路连接图】连线:CS5→8000H;IOWR→IOWR;JX2→JX17;AOUT→示波器。
【程序框图】三角波【编程】1)方波CODE SEGMENT ;定义代码段ASSUME CS:CODEORG 1200HSTART:MOV DX,8000HMOV AL,00HLOOP1:OUT DX,ALCALL DELAYXOR AL,0FFH ;高低电平转换JMP LOOP1DELAY: ;若干秒延时MOV BX,0FFHLOOP2:DEC BXJNZ LOOP2RETCODE ENDSEND STARTCODE SEGMENT ;定义代码段ASSUME CS:CODEORG 1200HSTART:MOV DX,8000HMOV AL,00HLOOP1: ;逐步累加到5V,到最大值后又从零开始累加OUT DX,ALNOPINC ALJMP LOOP1CODE ENDSEND STARTLOOP2:OUT DX,ALMOV AL,00H ;达到最大值后,再从00H不断累加,使波形上升JMP LOOP1 ;循环输出锯齿波CODE ENDSEND START3)三角波CODE SEGMENT ;定义代码段ASSUME CS:CODEORG 1200HSTART:MOV DX,8000HMOV AL,00HLOOP1:OUT DX,ALINC ALCMP AL,0FFHJZ LOOP2 ;进行三角波下降沿JMP LOOP1LOOP2:OUT DX,ALDEC ALNOPJZ LOOP1 ;重新进行三角波上升沿JMP LOOP2CODE ENDSEND START1、DAC产生波形的频率如何调节?频率上限的限制取决于那些因素?解:如果是方波只要调节延时程序就可以实现改变频率。
微机原理实验报告-分支程序设计
实验三 分支程序设计一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法。
二、软硬件环境1.硬件环境:微机CPU 486以上,500MB 以上硬盘,32M 以上内存; 2.软件环境:装有MASM 5.0、DEBUG 、LINK 和EDIT 等应用程序。
三、实验涉及的主要知识单元在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号和相减而导致的结果来进行。
下面就有符号数转移指令来了解在汇编语言程序设计方法。
四、实验内容与步骤1.实验内容(1)编写计算下面函数值的程序:⎪⎩⎪⎨⎧<-=>=0,10,00,1x x x y设输入数据为X 、输出数据Y ,且皆为字节变量,使用Debug 查看X 、Y 两个变量的数据(2)以ARRAY 为首地址的内存单元中,存放5个8位的不带符号数,找出5个数中的最大数,并将结果存入RESULT 字节单元中。
2.实验步骤 a.实验流程图(1)计算函数值的流程图b.编写程序(1)计算函数值的实验代码 DATA SEGMENT X DB 12 Y DB ?DATA ENDSSTACK SEGMENT STACK'STACK' DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV AL,XX CMP AL,0 ;把AX 与0比较JGE BIGPR ;0≥AL 转入BIGPR MOV Y,0FFFFH ;0<AL 则1-=Y JMP EXIT BIGPR: JE EQUPR ;0=AL 转入EQUPR MOV Y,1 ;0>AL 则1=Y JMP EXIT EQUPR: MOV Y,0;0=AL 则0=YEXIT: MOV AL,Y RET CODE ENDS END START(2)查找最大值的实验代码 DATA SEGMENT ARRAY DB 2,1,4,5,3 RESULT DB ? DATA ENDSSTACK SEGMENT STACK'STACK' DB 100H DUP(?) STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX LEA B X,ARRAY MOV AL,[BX] ;ARRAY 第一个数存入BXMOV CX,5 ;置循环次数 LOP: INC BX ;指针变量增1 CMP AL,[BX] ;比较AL 中数与[BX]的大小JAE L1;][BX AL ≥转入L1 MOVAL,[BX];][BX AL <则][BX AX ← L1: LOOP LOP;执行循环LOP 程序MOV RESULT,AL MOV AH,4CH INT 21H CODE ENDS END STARTc.对程序进行debug 调试,观察中间结果 (1)计算函数值的调试 1.反汇编内容①MOV AL,XX 反汇编后变成MOV AL,[0000],即XX 为数据段第一个存储单元的内容,数据段的起始偏移地址为0000。
微机原理实验报告(两个32位无符号数乘法程序以及码制转换程序设计)
微机原理实验报告(两个32位无符号数乘法程序以及码制转换程序设计)----05f17e0a-6eb2-11ec-86e4-7cb59b590d7d微机原理实验报告姓名:班级:学号:时间:实验名称:基本汇编语言程序设计实验1:两个32位无符号数乘法程序实验2:代码系统转换程序设计<1>十六进制到ascii<2>从二进制到ascii一、程序流程图1、两个32位无符号数乘法程序:2.十六进制到ASCII二、程序的实现:1、实验一程序:名称32位多数据段mulnumdw0000,0ffffh,0000,0ffffh,4dup(?)dataendsstack'stack'db100dup(?)斯塔克恩兹codesegment假设:代码,ds:data,ss:stack,es:datastartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axleabx,mulnummulu32:movax,[bx]movsi,[bx+4]movdi,[bx+6]乳化液mov[bx+8],axmov[bx+0ah],dxmovax,[bx+2]mulsiaddax,[bx+0ah]adcdx,0mov[bx+0ah],axmov[bx+0ch],dxmovax,[bx]muldiaddax、[bx+0ah]adcdx、[bx+0ch]mov[bx+0ah]、axmov[bx+0ch]、DXFmovax,[bx+2]muldipopfadcax,[bx+2]adcdx,0mov[bx+0ch],axmov[bx+0eh],dxretSTARTENDPCODENDSENDSTART2、实验二的程序:1)名称HEX_uu更改为uuidatasegmentl1dw2stringdb34h,98hl2dw?缓冲区db2*2dup(?)数据端stacksegmentparastack'stack'db100dup(?)stackends代码段assumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axmovcx,l1leabx,stringleasi,buffermovl2,cxmovcx,ax再次:moval,[bx]movdl,alandal,0fhcallchangemoval,dlpushcxmovcl,4shral,clpopcxcallchangeincbxretstartendpchangeproccmpal,10jladd_0addal,'a'-'0'-10add_0:addal,'0'mov[si],alincsiretchangeendpcodeendsendstart2)namebinary_to_acsiidatasegmentnumdw4f78hstringdb16dup(?)dataendsstack'stack'db100dup(?)斯塔克恩兹codesegment假设:代码,ds:data,ss:stack,es:datastartprocfarbegin:pushdsmovax,0pushaxmovax、数据MOVDS、axmoves、axleadi、字符串movcx,lengthstringpushdipushcxmoval,30h;repstowpopcxpopdimoval,31hmovbx,numagain:rclbx,1jncnextmov[di],alnext:incdiloopagainretstartendpcodeendsendstart三、实验感想:在实验过程中,我根据书慢慢理解了这些代码的含义,并纠正了代码中的错误。
北理(bit)微机原理上机软件实验报告
北理(bit)微机原理上机软件实验报告微机原理软件编程实验报告班级:学号:姓名:⼀、实验题⽬1、IDE86集成开发环境的学习和运⽤2、编写程序求出10个数中的最⼤值和最⼩值,并以单步形式观察如何求出最⼤值、最⼩值。
3、求1到100 的累加和,并⽤⼗进制形式将结果显⽰在屏幕上。
要求实现数据显⽰,并返回DOS状态。
4、将存储器中的⼗个字节型⼗六进制有符号数按从⼩到⼤的顺序排序并按⼗六进制显⽰出来。
(56H、0ffH、78H、82H、12H、0、95H、58H、0bcH、34H)⼆、实验⽬的1、学习并掌握IDE86集成开发环境的使⽤包括编辑、编译、链接、调试与运⾏等步骤编辑:源程序的输⼊、修改。
编译:常见编译出现的语法错误的修改。
可执⾏⽂件。
运⾏:运⾏、断点设置、单步运⾏、单步跟踪;观察寄存器、标志寄存器值;观察数据存储器中的数据。
2、完成所有题⽬,提⾼编程能⼒,加深对理论课的理解。
三、实验内容1、⽂字叙述设计思路1.1编写程序求出10个数中的最⼤值和最⼩值由于⼀共有⼗个数,所以求其最⼤数或者最⼩数需要⽐较9次。
从数据段的段⾸开取数,先取两个数进⾏⽐较,⽐较完后取其中的最⼤数或者最⼩数放⼊数据段的第⼆位中。
再取第三位数与第⼆位数⽐较,如此循环,⽐较9次后在数据段最末位的就是我们需要的数。
1.2求1到100 的累加和,并⽤⼗进制形式将结果显⽰在屏幕上求和部分:1~100⼀共有100个数,所以需要做100次加法。
做加法要有两个数,第⼀个数是第i位的数值,第⼆个数是i-1位以及之前所有数的和,所以这两个数必须分别存放在两个寄存器⾥,并且两个数相加之后的所得的值,必须放在存放“和”的寄存器中,另外⼀个寄存器每做完⼀次加法⾃加1。
显⽰部分:我们所求得的最终数值在内存中是以16进制数存放的,但是由于结果只是⼀个数,我们可以把它的每⼀位所对应的ASCII码按照⼀定的顺序存放到⼀个数据段中,再以字符串形式直接输出。
1.3将存储器中的⼗个字节型⼗六进制有符号数按从⼩到⼤的顺序排序并按⼗六进制显⽰出来⽐较部分:题⽬⼀共给了我们10个数,如果要进⾏排序的话可以先把⼗个数中最⼤的数选出来,放到数据段的最后⼀个位置,接着再选出次⼤的数放到数据段的倒数第⼆位,如此循环到最后便可成功将所给的⼗个数排序好。
微机实验报告循环程序
一、实验目的1. 理解循环程序的基本概念和作用。
2. 掌握C语言中循环语句(for、while、do-while)的用法。
3. 学会分析循环程序的结构,提高程序设计能力。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 语言:C语言三、实验内容本次实验主要设计以下循环程序:1. 打印1到100之间的所有整数。
2. 计算1到100之间所有整数的和。
3. 输入一个整数n,打印从1到n的斐波那契数列。
四、实验步骤1. 打印1到100之间的所有整数。
```c#include <stdio.h>int main() {int i;for (i = 1; i <= 100; i++) {printf("%d ", i);}printf("\n");return 0;}```2. 计算1到100之间所有整数的和。
```c#include <stdio.h>int main() {int i, sum = 0;for (i = 1; i <= 100; i++) {sum += i;}printf("The sum of 1 to 100 is: %d\n", sum);return 0;}```3. 输入一个整数n,打印从1到n的斐波那契数列。
```c#include <stdio.h>int main() {int n, a = 1, b = 1, c;printf("Enter an integer: ");scanf("%d", &n);printf("Fibonacci sequence up to %d is:\n", n);for (int i = 1; i <= n; i++) {if (i == 1 || i == 2) {printf("%d ", a);} else {c = a + b;a = b;b = c;printf("%d ", c);}}printf("\n");return 0;}```五、实验结果与分析1. 打印1到100之间的所有整数。
东南大学微机实验报告10页10页
东南大学微机实验报告10页10页
1. 简介:介绍实验目的、实验背景、研究问题和实验方法等。
2. 材料和方法:介绍实验材料和方法,例如使用的硬件、软件和技术等。
3. 结果:给出实验结果,例如测试数据和图表等。
4. 讨论:对结果进行讨论,对实验中遇到的问题进行解释和分析,并提出结论和建议。
5. 结论:总结实验过程、重要结果和研究结论,以及对未来工作的展望。
以下是一份典型的东南大学微机实验报告的框架,可以参考使用。
实验题目:xxx
实验时间:xxxx.xx.xx
实验地点:东南大学计算机实验室
学生姓名:xxx
实验报告结构
1. 简介
1.1 实验目的
1.3 研究问题
2. 材料和方法
2.1 硬件
2.3 技术
3. 结果
3.1 测试数据
4. 讨论
4.2 问题解释
4.3 建议
5. 结论
5.3 未来展望
参考文献: 1. xxxx。
微机原理__字符匹配程序实验报告
太原理工大学现代科技学院课程实验报告专业班级学号姓名指导教师一、实验目的掌握提示信息的使用方法及键盘输入信息的用法。
二、实验内容1、编写程序,实现两个字符串比较。
如果两个字符串中有一个字符相同,显示“MATCH”,否则,显示“NO MATCH”。
2、程序框图三、所用仪器与软件仪器:电脑一台软件:Masm for Windows 集成实验环境 2009、7四、实验方法、步骤1、编写程序代码2、运行程序,修改错误代码3、再次运行代码直至运行出正确结果五、源码程序编制及分析注释CRLF MACRO 宏定义MOV AH,02H AH=02HMOV DL,0DH DL=0DHINT 21H 系统功能调用,输出回车字符MOV AH,02H AH=02HMOV DL,0AH DL=0AINT 21H 系统功能调用,输出换行符ENDM 宏定义结束DATA SEGMENT 定义数据段MESS1 DB 'MATCH',0DH,0AH,'$' 定义8个数据储存单元MESS2 DB 'NO MATCH',0DH,0AH,'$' 定义11个数据储存单元MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' 定义17个数据储存单元MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' 定义17个数据储存单元MAXLEN1 DB 81 定义最大长度为81个字节ACTLEN1 DB ?STRING1 DB 81 DUP (?) 定义STRING1长度为81 MAXLEN2 DB 81 定义最大长度为81ACTLEN2 DB ?STRING2 DB 81 DUP (?) 定义STRING2长度为81DATA ENDS 数据段结束STACK SEGMENT STACK 定义堆栈段STA DB 50 DUP (?) 定义50个数据储存单元TOP EQU LENGTH STA 给TOP赋值50STACK ENDS 堆栈段结束CODE SEGMENT 定义代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK 定义段基址START: MOV AX,DATAMOV DS,AX 把DATA的首地址赋给DSMOV ES,AX 把DATA的首地址赋给ESMOV AX,STACKMOV SS,AX 把STACK的首地址赋给SSMOV SP,TOP 给SP赋值50MOV AH,09H AH=09HMOV DX,OFFSET MESS3 把MESS3的偏移地址赋给DXINT 21H 系统功能调用MOV AH,0AH AH=0AHMOV DX,OFFSET MAXLEN1 把MAXLEN1的偏移地址赋给DXINT 21H 系统功能调用CRLFMOV AH,09H AH=09HMOV DX,OFFSET MESS4 把MESS4的偏移地址赋给DXINT 21H 系统功能调用MOV AH,0AH AH=0AHMOV DX,OFFSET MAXLEN2 把MAXLEN2的偏移地址赋给DXINT 21H 系统功能调用CRLFCLDMOV SI,OFFSET STRING1 把STRING1的偏移地址赋给SIMOV CL,[SI-1] 把SI-1内的内容赋给CLMOV CH,00H CH=00HKKK: MOV DI,OFFSET STRING2 把STRING2的偏移地址赋给DI PUSH CX 将CX压入堆栈MOV CL,[DI-1] 将DI-1内的的内容赋给CLMOV CH,00H CH=00HMOV AL,[SI] 将SI内的内容赋给ALMOV DX,DI 将DI赋给DXREPNZ SCASB 寻找第一个相同字符JZ GGG ZF=0执行GGG否则顺序执行INC SI SI自加1POP CX 弹出CXLOOP KKK 跳转到KKK循环MOV AH,09HMOV DX,OFFSET MESS2INT 21H 系统功能调用JMP PPP 跳转到PPPGGG: MOV AH,09HMOV DX,OFFSET MESS1INT 21H 输出MESS1PPP: MOV AX,4C00HINT 21H 带返回码结束CODE ENDS 代码段结束END START 整个程序结束六、实验结果与分析实验结果如下:(1)两个字符串中没有字符相同:(2)两个字符串中有两个字符相同:。
微机原理软件实验报告
实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。
2. 掌握汇编语言程序设计的基本方法。
3. 通过实验,加深对微机原理的理解。
二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。
2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。
四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。
微机中断程序实验报告
一、实验目的1. 理解微机中断的概念和作用。
2. 掌握中断程序的编写和调试方法。
3. 学会使用中断服务程序实现特定功能。
二、实验环境1. 电脑一台2. Keil for 8051编译器3. Proteus仿真软件三、实验内容本次实验主要围绕中断程序的设计和调试展开,具体包括以下步骤:1. 创建项目2. 编写中断服务程序3. 调试程序4. 分析实验结果四、实验步骤1. 创建项目打开Keil for 8051编译器,创建一个新的项目,命名为“中断程序实验”。
2. 编写中断服务程序在中断程序实验项目中,我们需要编写两个中断服务程序,分别对应外部中断0和外部中断1。
(1)外部中断0服务程序```cvoid External0_ISR(void) interrupt 0 {// 外部中断0服务程序代码// 在此处编写外部中断0的处理代码}```(2)外部中断1服务程序```cvoid External1_ISR(void) interrupt 2 {// 外部中断1服务程序代码// 在此处编写外部中断1的处理代码}```3. 调试程序在Proteus仿真软件中,搭建实验电路,并连接好8051单片机。
将编写好的中断服务程序烧录到单片机中,然后进行仿真调试。
(1)调试外部中断0在Proteus中,连接一个按钮作为外部中断0的触发信号。
按下按钮时,程序应该能够进入外部中断0服务程序。
(2)调试外部中断1在Proteus中,连接另一个按钮作为外部中断1的触发信号。
按下按钮时,程序应该能够进入外部中断1服务程序。
4. 分析实验结果经过调试,我们发现外部中断0和外部中断1服务程序均能正确执行。
这表明我们已经成功实现了中断程序的设计。
五、实验心得通过本次实验,我对微机中断程序有了更深入的了解,以下是我在实验过程中的心得体会:1. 中断程序在微机系统中具有重要作用,它可以提高系统的实时性和效率。
2. 编写中断服务程序时,需要注意中断优先级和中断嵌套问题。
微机原理软件实验报告
信息与通信工程学院微机原理软件实验报告班级:姓名:学号:日期:2011年12月实验一DEBUG的使用 (1)一、实验目的 (1)二、实验内容 (1)三、预习思考 (3)四、实验过程 (4)五、实验总结 (9)实验二分支、循环程序设计 (10)一、实验目的 (10)二、实验内容 (10)三、预习思考 (10)四、实验过程 (10)(一)、流程图 (11)(二)、源代码 (11)(三)、实验分析 (11)五、实验总结 (14)实验三代码转换程序设计 (15)一、实验目的 (15)二、实验内容 (15)三、预习思考 (15)四、实验过程 (16)(一)流程图 (16)(二)模块层次图 (16)(三)源代码 (17)(四)实验分析 (21)五、实验总结 (22)实验四子程序设计 (23)一、实验目的 (23)二、实验内容 (23)三、预习思考 (23)四、实验过程 (24)(一)流程图 (24)(二)模块层次图 (25)(三)源代码 (25)(四)实验分析 (34)五、实验总结 (35)实验五中断程序设计 (37)一、实验目的 (37)二、实验内容 (37)三、预习思考 (37)四、实验过程 (38)(一)流程图 (38)(二)源代码 (39)(三)实验分析 (45)五、实验总结 (46)实验一 DEBUG 的使用一、实验目的1.掌握汇编程序的编辑、编译、连接和执行的全过程;2.学习和掌握用DEBUG调试程序的方法。
二、实验内容1.用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20B DB 15Y DB 3 DUP(0)Z DB 0,0DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DATSTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AL,AMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSUB1 ENDPCOD ENDSEND STAR2.通过编译,连接形成可执行文件。
微机原理实验报告——加法程序的设计
本科实验报告课程名称:微机原理及接口技术实验项目:加法程序实验地点:微机原理实验室专业班级:信息1001 学号:2010001193 学生姓名:指导教师:任光龙2013年6 月5 日一、实验目的学习数据传送和算数运算指令的用法二、实验内容将两个多位十进制数28056,47193相加,并显示加数,被加数,和。
要求两个加数均以ASCⅡ码形式各自顺序存放在DATA1和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。
三、程序流程图四、参考程序SHOW MACRO BMOV DL, BMOV AH, 02HINT 21HENDMDA TA SEGMENTDA TA1 DB 33H,39H,31H,37H,34HDA TA2 DB 36H,35H,30H,38H,32HDA TA3 DB'-',0DH,0AH,'$'DA TA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX, TOPMOV SP,AXMOV SI,OFFSET DATA2MOV BX,05SHOW 20HCALL DISPLSHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1MOV BX,05SHOW 2BhCALL DISPLSHOW 0DHSHOW 0AHMOV CL,7S1: SHOW 2DHLOOP S1SHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1MOV DI,OFFSET DA TA2CALL ADDAMOV SI,OFFSET DATA1MOV BX,05SHOW 20HCALL DISPLMOV AX,4C00HINT 21HDISPL PROC NEARDS1: SHOW [SI+BX-1]DEC BXJNZ DS1RETDISPL ENDPADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05ADI: SUB BYTE PTR [SI+BX-1],30H SUB BYTE PTR [DI+BX-1],30HDEC BXJNZ ADIMOV SI,DXMOV DI,BPMOV CX,05CLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALINC SIINC DILOOP AD2MOV SI,DXMOV DI,BpMOV BX,05AD3: ADD BYTE PTR [SI+BX-1],30H ADD BYTE PTR [DI+BX-1],30HDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START六、实验结果七、思考题不改变数据段DATA1和DATA2的内容,如何将加数与被加数分别由28056和47193变成65082和39174,并且相加答:源程序不变将DATA1 DB 33H,39H,31H,37H,34HDATA2 DB 36H,35H,30H,38H,32H后加上DATA4 DB 34H,37H,31H,39H,33HDATA5 DB 32H,38H,30H,35H,36H并将全部DATA1和DATA2全部改成DATA4和DATA5就可以实现。
东南大学信息学院微机实验报告九
实验九一、实验目的1、熟悉系统功能调用INT 21H的有关功能2、编写时钟程序二、实验任务1、执行时钟程序时,屏幕上显示提示符“:”,由键盘输入当前时、分、秒值,即XX:XX:XX,随即显示时间并不停地计时。
2、当有键盘按下时,立即停止计时,返回DOS。
三、源程序DATA SEGMENTBUFFER DB 11DB ?DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAOUTCLK: MOV AX,DATAMOV DS,AXMOV DL,':'MOV AH,2INT 21HMOV DX,OFFSET BUFFERMOV AH,0AH ;输入字符串INT 21HMOV BX,OFFSET BUFFER+2MOV AL,[BX] ; 时针,ASCII码转非压缩BCDCMP AL, 03AHJAE ERROR1CMP AL, 02FHJBE ERROR1AND AL,0FHMOV [BX],ALINC BXMOV AL,[BX]AND AL,0FHMOV [BX],ALINC BXINC BXMOV AL,[BX] ; 分针AND AL,0FHMOV [BX],ALINC BXMOV AL,[BX]AND AL,0FHMOV [BX],ALINC BXINC BXMOV AL,[BX] ;秒针AND AL,0FHMOV [BX],ALINC BXMOV AL,[BX]AND AL,0FHMOV [BX],ALMOV BX,OFFSET BUFFER+2CALL TOBCD ; 时针,两位非压缩BCD转换成两位压缩BCD MOV CH, ALADD BX,3CALL TOBCDMOV DH, AL ; 分针,两位非压缩BCD转换成两位压缩BCD MOV DH,ALADD BX,3CALL TOBCD ; 秒针,两位非压缩BCD转换成两位压缩BCD MOV DL,ALCMP CH, 24HJAE ERRORCMP DH, 60HJA ERRORCMP DL, 60HJA ERRORERROR1: MOV AH,4CHINT 21HAGAIN: CALL DELAYMOV AL,DL ; 秒针加1ADD AL,1DAAMOV DL,ALCMP AL,60HJA ERRORJNE DISPYMOV DL,0MOV AL,DHADD AL,1 ; 分针DAAMOV DH,ALCMP AL,60HJA ERRORJNE DISPYMOV DH,0MOV AL,CHADD AL,1DAA ; 时针 MOV CH,ALCMP AL,24HJAE ERRORJNE DISPYMOV CH,0ERROR: MOV DL, 0MOV DH, 0MOV CH, 0DISPY: MOV BX,OFFSET BUFFERMOV AL,0DHMOV [BX],ALINC BXMOV AL,0MOV [BX],ALINC BXMOV AL,CHCALL TRANINC BXMOV AL,':'MOV [BX],ALINC BXMOV AL,DHCALL TRANINC BXMOV AL,':'MOV [BX],ALINC BXMOV AL,DLCALL TRANINC BXMOV AL,'$'MOV [BX],ALPUSH BXPUSH CXPUSH DXMOV DX,OFFSET BUFFERMOV AH,9INT 21HMOV AH,06HMOV DL,0FFHINT 21HPOP DXPOP CXPOP BXJNE GOJMP AGAINGO: MOV AH,4CHINT 21HTOBCD PROC ; 两位非压缩BCD转换成压缩 MOV AL,[BX]MOV CL,4SHL AL,CLOR AL,[BX+1]RETTOBCD ENDPTRAN PROC ; BCD转ASCIIMOV CL,ALSHR AL,1SHR AL,1SHR AL,1SHR AL,1OR AL,30HMOV [BX],ALINC BXMOV AL,CLAND AL,0FHOR AL,30HMOV [BX],ALRETTRAN ENDPDELAY PROCPUSH CXPUSH AXMOV AX,0FFFFHFIR: MOV CX,02FFFHGOON: DEC CXJNE GOONDEC AXJNE FIRPOP AXPOP CXRETDELAY ENDPCODE ENDSEND OUTCLK四、思考题时钟程序中存在误差不?若有误差,其来源在何处?如何进行误差矫正?答:存在,来源自实验循环的次数,来自“MOV AX,0FFFFH FIR: MOV CX,02FFFH”,如要进行矫正,只需调整AX与CX使之乘积与计算机运行速度相匹配即可。
微机原理 实验报告——显示程序实验与8259应用编程实验
北京信息科技大学自动化学院实验报告课程名称微型计算机原理与接口技术实验名称显示程序实验与8259应用编程实验实验仪器 TDN86/88教学实验台专业自动化学院班级/学号自控0801/2008010827学生姓名林明泉实验日期实验地点成绩指导教师北京信息科技大学自动化学院(微机原理)实验报告专业:自动化班级:自控0801 学号:2008010827 姓名:林明泉实验名称显示程序实验与8259应用编程实验实验地点实验楼706 实验时间2010年11月1.实验目的:1.了解INT 10H各功能块的作用及用法。
2.掌握字符方式下PC机显示器显示控制。
3.认识8086系统的中断特性。
4.掌握8259中断控制器的工作原理及其使用方法、应用编程。
2.实验设备:TDN86/88教学实验系统一台,计算机一台3.实验原理及内容:一、显示程序实验显示器I/O功能调用使用说明INT 10入口:AH=00H,AL=01H 功能:清屏入口:AH=01H,AL=数据功能:写AL中的数据到屏幕上入口:AH=06H,DS:BX=字串首地址,且字符串结尾用00H填充功能:显示已字符串直到遇到00H为止。
1、在显示器上显示A-Z 26个英文字母;程序:STACK1 SEGMENT STACKDW 64 (?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK1 START:MOV CX,001AHMOV BL,41HMOV AH,01HA1:MOV AL,BLINT 10HINC BLPUSH CXMOV CX,0FFFFHA2:LOOP A2POP CXLOOP A1INT 03HCODE ENDS END START2、在显示器上显示‘GOOD AFTERNOON’。
要求分别用AH=01H,AH=06H来完成。
a、STACK1 SEGMENT STACKDW 64 (?)STACK1 ENDSDA TA SEGMENTXIAN DB 'GOOD AFTERNOON',00HDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK1 START:MOV CX,14MOV AX,DATAMOV DS,AXMOV BX,OFFSET XIANMOV AH,01HA1:MOV AL,[BX]INT 10HINC BXPUSH CXMOV CX,0FFFFHA2:LOOP A2POP CXLOOP A1INT 03HCODE ENDSEND STARTb、STACK1 SEGMENT STACKDW 64 (?)STACK1 ENDSDATA SEGMENTXIAN DB 'GOOD AFTERNOON',00HDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK1 START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET XIANMOV AH,06HINT 10HINT 03HCODE ENDSEND START二、中断特性以及8259应用编程实验系统中的8259芯片寄存器组编址为20H和21H。
南理工微机实验报告
南理工微机实验报告篇一:南京理工大学微机实验报告微机实验报告实验2.1汇编语言程序的调试与运行思考题:1、带进位加法程序:DISP MACRO XMOV DL,XMOV AH,02HINT 21HENDMDATA SEGMENTDATA1 DB'65087'DATA2 DB'75087'N EQU $-DATA2DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXLEA SI,DATA1MOV BX,0MOV CX,NCALL DISPLDISP '+'LEA SI,DATA2MOV BX,0MOV CX,NCALL DISPLDISP '='LEA DI,DATA1MOV CX,NCALL ADDALEA SI,DATA1MOV BX,0MOV CX,NCMP DL,0JZ NEXTDISP '1'NEXT: CALL DISPLDISP 0DHDISP 0AHMOV AX,4C00HINT 21HDISPL PROCDS1:MOV AH,02HMOV DL,[SI+BX]INT 21HINC BXLOOP DS1RETDISPL ENDPADDA PROCPUSH CXMOV BX,0AD1:SUB BYTE PTR [SI+BX],30H SUB BYTE PTR [DI+BX],30HINC BXLOOP AD1POP CXPUSH CXMOV BX,N-1CLCAD2:MOV AL,[SI+BX]ADC AL,[DI+BX]AAAMOV [DI+BX],ALDEC BXLOOP AD2POP CXPUSH CXMOV BX,0MOV DL,0JNC AD3MOV DL,1AD3:ADD BYTE PTR [DI+BX],30H INC BXLOOP AD3POP CXRETADDA ENDPCODE ENDSEND START结果截图:2、上机步骤,调试方法:1、写代码完成功能要求,文件格式为.asm文件(如21si.asm),将文件放入带汇编工具的文件夹中,即含有汇编工具(MASM.EXE)和链接工具(LINK.EXE)的文件夹。
循环结构微机实验报告
一、实验目的1. 理解微机循环结构的基本原理;2. 掌握循环结构的编程方法;3. 熟悉微机实验环境及工具的使用;4. 提高编程能力和问题解决能力。
二、实验环境1. 实验设备:PC微机一台;2. 实验软件:汇编语言编程软件(如MASM、TASM等);3. 实验工具:汇编语言编程手册、实验指导书。
三、实验内容1. 循环结构的原理及编程方法循环结构是程序设计中常用的一种结构,它可以简化程序设计,提高编程效率。
本实验主要介绍以下循环结构:(1)顺序循环结构:按照顺序执行程序中的语句,直到循环条件不满足为止。
(2)当型循环结构:当循环条件满足时,执行循环体内的语句;当循环条件不满足时,退出循环。
(3)直到型循环结构:执行循环体内的语句,直到循环条件不满足为止。
2. 循环结构的编程实例(1)求1到100的和程序代码如下:```MOV CX, 100 ; 设置循环次数为100MOV AX, 0 ; 初始化累加器AX为0SUM_LOOP:ADD AX, CX ; 将循环次数加到AX上LOOP SUM_LOOP ; 判断CX是否为0,如果不为0,则继续循环```(2)计算Fibonacci数列的前10项程序代码如下:```MOV CX, 10 ; 设置循环次数为10MOV AX, 0 ; 初始化累加器AX为0MOV BX, 1 ; 初始化累加器BX为1FIB_LOOP:ADD AX, BX ; 将BX加到AX上XCHG AX, BX ; 将AX的值传给BXDEC CX ; 循环次数减1JNZ FIB_LOOP ; 判断CX是否为0,如果不为0,则继续循环```3. 循环结构的调试及优化在编程过程中,可能会遇到循环结构不正确、效率低下等问题。
以下是一些调试及优化方法:(1)检查循环条件是否正确;(2)优化循环体内的语句,减少计算量;(3)使用循环嵌套结构,提高程序效率;(4)合理使用循环变量,减少内存占用。
四、实验结果与分析1. 实验结果通过实验,我们成功实现了以下功能:(1)求1到100的和;(2)计算Fibonacci数列的前10项;(3)掌握了循环结构的编程方法及调试技巧。
微机循环程序设计实验报告
微机循环程序设计实验报告微机循环程序设计实验报告引言在当今数字化时代,计算机技术的发展已经成为各个领域的核心。
作为计算机科学的基础,循环程序设计在软件开发中扮演着重要的角色。
本实验旨在通过微机循环程序设计,探索程序的优化和性能提升。
实验目的1. 了解循环程序设计的基本概念和原理。
2. 熟悉微机循环程序设计的编写方法和技巧。
3. 掌握循环程序的性能优化和调试方法。
4. 分析循环程序设计在实际应用中的价值和局限性。
实验过程1. 实验环境搭建在开始实验前,我们需要搭建一个合适的实验环境。
选择一款适合的集成开发环境(IDE),并安装相应的编译器。
在本实验中,我们选择了Visual Studio作为开发环境,C语言作为编程语言。
2. 编写简单的循环程序在掌握基本的编程语法后,我们开始编写简单的循环程序。
通过使用for循环,我们可以实现对某个任务的重复执行。
这样的程序通常用于处理大量数据或者进行复杂的计算。
通过编写简单的循环程序,我们可以更好地理解循环程序设计的基本原理。
3. 优化循环程序性能在编写循环程序的过程中,我们需要考虑程序的性能。
通过合理地选择循环结构和优化算法,我们可以提高程序的执行效率。
例如,我们可以使用并行化技术来加速程序的运行,或者使用循环展开来减少循环的次数。
通过不断地优化,我们可以使程序更加高效。
4. 调试循环程序循环程序设计中常常会出现一些错误,例如死循环、数组越界等。
为了找出并解决这些错误,我们需要使用调试工具。
通过逐步执行程序,并观察变量的值和程序的执行流程,我们可以找到错误的原因并进行修复。
实验结果与分析通过实验,我们成功编写了多个循环程序,并对其进行了性能优化和调试。
在程序执行过程中,我们发现了一些问题,例如循环次数过多导致程序执行时间过长,或者循环条件设置不当导致程序无法正常结束。
通过分析这些问题,我们可以得出以下结论:1. 循环程序设计是一种高效的编程方法,可以大大提高程序的执行效率。
微机原理实验报告
微机原理实验报告实验名称:MIPS汇编程序设计院系:电信学院班级:姓名:指导老师:一、实验目的:1.熟悉MIPS汇编程序开发环境,学习使用Qtstim工具。
知道如何查看内存空间分配。
2. 了解C语言语句与汇编指令之间的关系。
3. 掌握MIPS汇编程序设计,掌握QTSPIM的调试技术。
4. 了解MIPS汇编语言与机器语言之间的对应关系。
5. 熟悉常见的MIPS汇编指令6. 掌握程序的内存映像。
二、实验内容1.用汇编程序实现以下伪代码:要求使用移位指令实现乘除法运算。
Int main (){Int K,Y;Int Z[50];Y=56;For(k=0;k<50;K++) Z[k]=Y-16*(k/4+210);}三、程序设计及分析1.C语言分析:有两个变量是int型,一个数组型;还有一个循环执行过程。
2.汇编程序实现分析:首先需要定义用户数据段,获得一个内存空间作为数组空间。
再选定几个存放器作为K,Y以及输出,其中输出输出和Y可以合用一个存放器。
3.设计思路:分配完空间地址后,最重要的是完成循环控制。
循环控制有两个思路:可以是先判断后循环;或者是先循环后判断 即如图slti $t2,$t0,50 #判断k 是否于50beq $t2,$t3〔$t2=1循环,否那么结束。
〕四、程序实现及调试分析1.汇编程序代码实现:方法一.data #定义用户数据段z:.space 200 #数组为int型,大小为50,所以占内存4*50 str:.asciiz " "#输出结果之间的空隙.textmain:la $s0,z #$s0 #为数组在z[]li $t0,0 #$s1 #代表k计数,初始值为0li $t1,56 #$t2 #代表Y,初值为56loop:slti $t2,$t0,50 #判断k是否于50beq $t2,$0,done #当k大于等于50,跳转结束srl $t3,$t0,2 #k/4addi $t3,$t3,210 #k/4+210sll $t3,$t3,4 #16*(k/4+210)sub $t3,$t1,$t3 #y-16*(k/4+210)sw $t3,0($s0) #写进z[k]li $v0,1 #输出addi $a0,$s0,0syscallli $v0,4 #输出间隔la $a0,strsyscalladdi $s0,$s0,4 #地址移一位addi $t0,$t0,1 #k加1j loop #循环done:li $v0,10syscall2.调试过程1.编写程序:详细见代码2.装载程序选择file,选择Reinitialize and Load File,把写好的文件导入QtSpim。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
惠州学院
电子信息与电气工程学院
程序设计报告
课程名称:微机原理与接口技术
班级:15电气2班
姓名:肖子浩1507080601232
钟智威1507080601238
指导老师:谢珩
2017.11.04
一、实验目的
熟练掌握汇编指令的使用,学会用汇编语言写程序实现简单的功能。
二、实验内容
编一程序,分别统计从内存单元TEMP处开始的连续100个字节单元中大、小写字母、数字和其他字符的个数,最后在屏幕上显示结果(假设结果不超过两位数)。
扩展:键盘输入一段字符串,统计各字符个数并分类在屏幕上显示。
三、程序
DATA segment
MESS DB 0DH,0AH,'Input String: $'
UP DB 0 ;大写个数初值置0
DOW DB 0 ;小写个数初值置0
NUM DB 0 ;数字个数初值置0
ELS DB 0 ;其他字符个数初值置0
ZS DB 0 ;输入字符总数初值置0
UP_C DB 100 DUP ('$')
DOW_C DB 100 DUP ('$')
NUM_C DB 100 DUP ('$')
ELS_C DB 100 DUP ('$')
CRLF DB 0DH,0AH,'$'
DATA ENDS
code segment
assume cs:code, ds:data
MAIN PROC FAR
START:
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,09 ;选择09函数,显示字符串
MOV DX,OFFSET MESS ;DX = 数据的偏移地址
INT 21H ;调用21H中断
NEXT:
MOV AH,01
INT 21H
CMP AL,0DH
JNZ GOON
JMP DISP_1 ;显示结果
GOON:
INC ZS
CMP AL,'A';比较AL和A的ASCii码
JL NO_UP ;若刚才比较结果小于A的ASCii码,跳到NEXT
CMP AL,'Z';比较AL和Z的ASCii码
JG NO_UP ;若刚才比较结果大于Z的ASCii码,跳到NO_UP
INC UP ;大写字母个数+1
MOV BX,OFFSET UP_C ;BX指向空间NUM_
MOV CX,0
MOV CL,UP
ADD BX,CX ;BX指向地址后移位
DEC BX ;前移1位
MOV[BX],AL ;把AL内容存在BX指向地址下
JMP NEXT
NO_UP:
CMP AL,'a';比较AL和a的ASCii码
JL NO_DOW ;若刚才比较结果小于a的ASCii码,跳到NEXT
CMP AL,'z';比较AL和z的ASCii码
JG NO_DOW ;若刚才比较结果大于z的ASCii码,跳到NO_DOW
INC DOW ;小写字母个数+1
MOV BX,OFFSET DOW_C
MOV CX,0
MOV CL,DOW
ADD BX,CX ;BX指向地址后移位
DEC BX ;前移1位
MOV[BX],AL ;把AL内容存在BX指向地址下
JMP NEXT
NO_DOW:
CMP AL,'0';比较AL和0的ASCii码
JL NO_NUM ;若刚才比较结果小于0的ASCii码,跳到NEXT
CMP AL,'9';比较AL和9的ASCii码
JG NO_NUM ;若刚才比较结果大于9的ASCii码,跳到NO_NUM
INC NUM ;数字个数+1
MOV BX,OFFSET NUM_C ;BX指向空间NUM_C
MOV CX,0
MOV CL,NUM
ADD BX,CX ;BX指向地址后移位
DEC BX ;前移1位
MOV[BX],AL ;把AL内容存在BX指向地址下
JMP NEXT
NO_NUM:
INC ELS
MOV BX,OFFSET ELS_C
MOV CX,0
MOV CL,ELS
ADD BX,CX
DEC BX
MOV[BX],AL
JMP NEXT
DISP_1:
CALL CRLF_P
MOV AL,UP
CALL DISP_CZR
MOV AH,09
LEA DX,UP_C
INT 21H
CALL CRLF_P
MOV AL,DOW
CALL DISP_CZR
MOV AH,09
LEA DX,DOW_C
INT 21H
CALL CRLF_P
MOV AL,NUM
CALL DISP_CZR
MOV AH,09
LEA DX,NUM_C
INT 21H
CALL CRLF_P
MOV AL,ELS
CALL DISP_CZR
MOV AH,09
LEA DX,ELS_C
INT 21H
CALL CRLF_P
MOV AL,ZS
CALL DISP_CZR
CALL CRLF_P
MOV AX,4C00H
INT 21H
ENDD:
RET
MAIN ENDP
DISP_CZR PROC NEAR ;显示10进制数字子程序XOR AH,AH
MOV AL,AL
MOV BL,100D
DIV BL
PUSH AX
ADD AL,30H
MOV DL,AL
MOV AH,02H ;显示输出
INT 21H
POP AX
MOV AL,AH
XOR AH,AH
MOV BL,10D
DIV BL
ADD AX,3030H
PUSH AX
POP DX
MOV AH,02H ;显示输出
INT 21H
MOV DL,DH
INT 21H
MOV DL,':'
INT 21H
MOV DL,' '
INT 21H
RET
DISP_CZR ENDP
CRLF_P PROC NEAR ;回车换行子程序
MOV AH,09
LEA DX,CRLF
INT 21H
RET
CRLF_P ENDP
CODE ENDS
END
四、程序流程图
五、运行结果图
图2 程序运行图
图3 输入100个字符运行结果图。