微机程序报告

合集下载

微机实验报告

微机实验报告

微机实验报告第⼀次实验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

上海大学微机实践报告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位无符号数乘法程序以及码制转换程序设计)

微机原理实验报告(两个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)微机原理上机软件实验报告

北理(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页

东南大学微机实验报告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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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个字符运行结果图。

相关文档
最新文档