实验三 代码转换
北京邮电大学微机原理软件实验报告
信息与通信工程学院微机原理软件实验报告班级:姓名:学号:班内序号:时间:微机原理软件实验·报告实验一DEBUG 的使用一、实验目的1.掌握汇编程序的编辑,编译,连接和执行的全过程;2.学习和掌握用DEBUG 调试程序的方法。
二、实验内容1. 用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20 ;(自定)B DB 15 ;(自定)Y 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,B微机原理软件实验·报告MOV 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. 通过编译,连接形成可执行文件。
3. 用DEBUG 将可执行文件调入,并进行调试。
1) 用D 命令观察数据区在内存中的具体内容,记录单元A 和B 的具体地址。
2) 用U 命令对目标代码反汇编,观察反汇编后的结果。
注意发现源程序的起始位置,并记录这个起始地址。
3) 用T 命令作单步跟踪调试。
比较每条指令执行后的结果和原来的理解是否一致,得出程序运行的结果:它们是写在什么单元,具体内容是什么;并判断结果是否正确。
实验三 码型变换实验
实验三码型变换实验一、实验目的1.了解几种常见的数字基带信号。
2.掌握常用数字基带传输码型的编码规则。
3.掌握用FPGA实现码型变换的方法。
二、实验内容1.观察NRZ、RZ码、BRZ码、BNRZ码、AMI码、CMI码、HDB3码、BPH码的波形。
2.观察全0码或全1码时各码型波形。
3.观察HDB3码、AMI码、BNRZ码正、负极性波形。
4.观察NRZ码、RZ码、BRZ码、BNRZ码、AMI码、CMI码、HDB3码、BPH码经过码型反变换后的输出波形。
5.自行设计码型变换电路,下载并观察输出波形。
三、实验器材1.信号源模块2.码型变换模块3.20M双踪示波器一台4.频率计(可选)一台5.PC机(可选)一台6.连接线若干四、实验原理1.编码规则①NRZ码(见教材)②RZ码(见教材)③BNRZ码-双极性不归零码1 0 1 0 0 1 1 0+E-E④BRZ码-双极性归零码1 0 1 0 0 1 1 0+E-E⑤AMI码(见教材)⑥HDB3码(见教材)⑦BPH码BPH码的全称是数字双相码(Digital Diphase),又叫分相码(Biphase,Split-phase)或曼彻斯特码(Manchester),其编码规则之一是:0 01(零相位的一个周期的方波);110(π相位的一个周期的方波)。
例如:代码: 1 1 0 0 1 0 1双相码: 10 10 01 01 10 01 10这种码既能提取足够的定时分量,又无直流漂移,编码过程简单。
但带宽要宽些。
⑧CMI码CMI码的全称是传号反转码,其编码规则如下:信息码中的“1”码交替用“11”和“00”表示,“0”码用“01”表示。
例如:代码: 1 1 0 1 0 0 1 0CMI码: 11 00 01 11 01 01 00 01这种码型有较多的电平跃变,因此,含有丰富的定时信息。
该码已被ITU-T推荐为PCM四次群的接口码型。
在光纤传输系统中有时也用CMI码作线路传输码型。
实验三 汉明码编码与译码
实验三汉明码编码与译码一、实验题目1、写一个错误生成器模块,在给定的一个比特流作输入时,它的输出流的每个比特流都以概率p发生了改变,即比特错误概率为p。
2、对m=3,将汉明码编码后的比特流输入到上述模块,然后对收到的字用译码器进行译码。
二、实验目的1、理解和掌握汉明码编码与译码的原理;三、算法设计四、程序分析1、错误生成模块:任一给以p,系统任意生成一数,若比p小则让其出错,否则不出错。
2、编码:首先随机生成H矩阵,由H矩阵生成G矩阵,利用C=mG编码。
3、解码:若v*H’=0,则没有出错,直接输出v中前k位;若v*H’!=0,列出所有的e和e*H’得到伴随阵s,若能在s中找到s=v*H则c0=v-e,输出c0中前k位;若找不到s,则输出“错误位数大于纠错能力,无法解码”。
五、程序代码#include <iostream>#include <string> // 字符串处理头文件#include <iomanip> // 输入输出控制头文件#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;void Err_Pro();void Hamming_Decode();intm,n,k,t,err,r,R[100],N[100],COUNT[100],num[100][100],Th[100][100],PT_S[100][100],PT_D[1 00][100];intH[100][100],HT[100][100],Ig[100][100],P[100][100],G[100][100],Ibit[100],Cbit[100],Err_Cbit[1 00],V[100];/**************************************************************************//*函数名:void Binary_Conversion(int i) *//*功能:十-二进制转换*//*说明:该函数输出二进制数为低位在前,高位在后*//**************************************************************************/ void Binary_Conversion(int i){int j=0,temp=0;do // 生成完整n个二进制{temp = i % 2; // 判断相应最低位为0或1(若为2的倍数则为0,否则为1)i = i / 2; // 为考虑前一位为0或1做准备if(j < m) // m确定二进制的位数{N[j] = temp;j++;}}while(i != 0); // 等待i等于0(即等待十进制数为0时不进行二进制转换)}/**************************************************************************/ /*函数名:void Random_Array() */ /*功能:将数组的列随机排放*/ /**************************************************************************/ void Random_Array(){srand(unsigned(time(NULL))); // 随机生成条件(抵消rand函数伪随机效果)cout << endl << "产生随机数为:" << endl;for(int j=0;j<n;j++){loop:r= rand() % n; // 随机生成范围为0~n-1的正整数for(int i=0;i<j;i++){if(R[i] == r) // 如果随机产生的数与已产生的数相等,则重新随机产生数{goto loop;}}R[j] = r; // 产生不重复的随机数cout << setw(4) << r + 1;for(int i=0;i<m;i++){PT_D[i][j] = PT_S[i][r]; // 顺序转置系数矩阵->随机转置系数矩阵}}}/**************************************************************************/ /*函数名:void Creat_H() */ /*功能:创建系统型奇偶校验矩阵H */ /*说明:系统型奇偶校验矩阵H由转置负系数矩阵和单位矩阵组成*/ /**************************************************************************/ void Creat_H(){int i,j,count0=0,count1=0,count2=0,count3=0;/*************生成单位矩阵Ih************/ //教材P101for(i=0;i<m;i++) //i表示行j表示列{for(j=0;j<n;j++){if((j >= k) && (i+k == j))Ih[i][j] = 1;elseIh[i][j] = 0;}}/*********生成转置负系数矩阵PT**********/for(i=0;i<m;i++) // 转置二进制转换数组到PT_S{for(j=0;j<n;j++){PT_S[i][j] = num[j][i]; // 生成顺序转置系数矩阵}}Random_Array();//将数组的列随机排放for(j=0;j<n;j++){for(i=0;i<m;i++){if(PT_D[i][j] == 0)count0 ++;}count1 = count0; // count1记录每一列1的个数count0 = 0;if(count1 == (m-1)) // 将只有一位为1其余位为0的列的所有位置0{for(i=0;i<m;i++){PT_D[i][j] = 0;}}else// COUNT数组记录只有一位为1其余位为0的列为0,其余位的值为PT_D列的位置值+1 COUNT[count2] = j + 1;count2 ++;}for(int q=0;q<n;q++) // 将PT_D的至少有两个1的列赋给PT{if(COUNT[q] > 0){for(i=0;i<m;i++)PT[i][count3] = PT_D[i][q];count3 ++;}}cout << endl;/********生成系统型奇偶校验矩阵H********/for(i=0;i<m;i++){for(j=0;j<n;j++){H[i][j] = PT[i][j] + Ih[i][j];}}cout << endl << "系统型奇偶校验矩阵H为:" << endl;for(i=0;i<m;i++) // 显示系统型奇偶校验矩阵H{for(j=0;j<n;j++){cout << setw(2) << H[i][j] << setw(2);}cout << endl;}}/**************************************************************************/ /*函数名:void Creat_G() *//*功能:创建系统型生成矩阵G */ /*说明:系统型生成矩阵G由单位矩阵和系数矩阵组成*/ /**************************************************************************/ void Creat_G(){int i,j;/*************生成单位矩阵Ig************/for(i=0;i<k;i++){for(j=0;j<n;j++){if(i == j)Ig[i][j] = 1;elseIg[i][j] = 0;}}/*************生成系数矩阵P*************/for(j=0;j<n;j++){for(i=0;i<k;i++){if(j>k-1)P[i][j] = PT[j-k][i];}}/**********生成系统型生成矩阵G**********/for(i=0;i<k;i++){for(j=0;j<n;j++){G[i][j] = P[i][j] + Ig[i][j];}}cout << endl << "系统型生成矩阵G为:" << endl;for(i=0;i<k;i++) // 显示系统型奇偶校验矩阵H{for(j=0;j<n;j++){cout << setw(2) << G[i][j] << setw(2);}cout << endl;}}/*******************************主函数*************************************/ int main(){int i,j;cout << setw(30) << "汉明码" << endl;cout << "请输入校验元位数m = ";cin >> m;n = pow(2,m) - 1; //码长k = pow(2,m) - 1 -m; //信息源位数cout << "提示:" << setw(10) << "您输入的为(" <<n<< "," <<k<< ")汉明码,可纠正" << t << "个错误" << endl;cout << endl;for(i=0;i<n;i++) // 将n个转换二进制数组存入二维数组{Binary_Conversion(i+1);for(j=0;j<m;j++){num[i][j] = N[j];//num[i][m-j-1] = N[j]; // m-j-1意义在于将二进制高位在前,低位在后}}cout << "n个二进制转换表为:" << endl;for(i=0;i<n;i++) // 输出二进制转换对应表低位在前高位在后{for(j=0;j<m;j++){cout << num[i][j] << setw(2);}cout << setw(4);}cout << endl;Creat_H();Creat_G();cout << endl << "请输入" << k << "位信息比特流:" << endl;for(i=0;i<k;i++)cin >> Ibit[i];for(i=0;i<n;i++){for(j=0;j<k;j++){Cbit[i] += (Ibit[j] * G[j][i]); // 十进制加法Cbit[i] = Cbit[i] % 2; // 将十进制转换二进制}}cout << endl << "输出" << n << "位码字比特流:" << endl;for(i=0;i<n;i++) //输出编码后的码字cout << setw(3) << Cbit[i];cout << endl;Err_Pro(); //错误概率函数Hamming_Decode(); //汉明译码return 0;}/**************************************************************************/ /*函数名:void Err_Pro() */ /*功能:产生错误概率函数*/ /**************************************************************************/ void Err_Pro(){float p;cout << endl << "请输入错误概率p = ";cin >> p;for(int x=0;x<n;x++){if((float)((rand() % 1001) * 0.001) < p) // 如果小于概率,则原码0与1互换{err ++;Err_Cbit[x] = (Cbit[x] + 1) % 2;}elseErr_Cbit[x] = Cbit[x]; // 如果大于错误概率,则赋值原码}cout << endl << "输出" << n << "位码字比特流(每位等概出错):" << endl;for(int y=0;y<n;y++)cout << setw(3) << Err_Cbit[y];cout << endl;}/**************************************************************************/ /*函数名:void Hamming_Decode() */ /*功能:汉明译码函数*//**************************************************************************/ void Hamming_Decode(){int i,j,flag=0,d;for(i=0;i<n;i++) // 得到H的转置矩阵HT{for(j=0;j<m;j++){HT[i][j] = H[j][i];}cout << endl << "输出转置奇偶校验矩阵HT为:" << endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout << setw(3) << HT[i][j] << setw(3);}cout << endl;}for(i=0;i<m;i++) // 计算伴随矩阵{for(j=0;j<n;j++){V[i] += Err_Cbit[j] * HT[j][i];}if(V[i] % 2 == 0) // 将十进制转换二进制V[i] = 0;elseV[i] = 1;}cout << endl << "输出伴随矩阵为:" << endl;for(i=0;i<m;i++)cout << V[i] << setw(2);cout << endl;for(i=0;i<m;i++){if(V[i] == 0) // 如果伴随矩阵为零矩阵,则直接输出原码流{if(i == m-1){cout << endl << "<译码正确!>输出码流为:" << endl;for(j=0;j<n;j++)cout << Err_Cbit[j] << setw(3);cout << endl;}}else{flag ++; // 如果伴随矩阵为非零矩阵,则标志位自加1break;}if(flag != 0){if(err == 1) // 伴随矩阵为非零矩阵时执行{for(i=0;i<n;i++){for(j=0;j<m;j++){if(V[j] == HT[i][j]){if(j == (m-1)) d = i;//d记录行}elsebreak;}}cout << endl << "<译码正确!>输出码流为:"<< endl;Err_Cbit[d] = (Err_Cbit[d] + 1) % 2;for(i=0;i<n;i++)cout << setw(3) << Err_Cbit[i] << setw(3);cout << endl;}elsecout << endl << "由于本次编码有" << err << "个错误位,大于纠错能力" << t << ",故<译码错误!>" << endl;}}六、程序运行结果。
实验三 数据转换实验
实验三数据转换实验一、实验目的掌握数据格式转换程序编写方法。
二、实验原理及实验内容将2字节二进制数转换成3字节压缩BCD数(5位十进制数)。
编写并调试一个二翻十程序,其功能为将40H,50H两单元中的二进制数转换为十进制数,并将转换结果存放在R4,R5,R6单元中。
将二进制转换成十进制的方法有多种,此实验采用左移二进制数,加倍十进制数并加入二进制数的移出位的方法来实现。
具体算法是,先将存放十进制数的3单元清0,再将二进制数左移1位,最高位移入进位。
然后,十进制数存放单元中的BCD数按BCD 数的规则加倍并加入进位。
如此连续移位、加倍、校正,直到所有的二进制数位均移出为止。
下面是程序流程图。
BP1BP2调试方法:⑴断点设在BP1,程序运行至BP1,检查40H、50H内容是否与输入值正确对应。
⑵断点设在BP2,程序运行至BP2,检查R4、R5、R6 内容是否为二进制所对应的十进制转换结果。
⑶程序连续运行,若有错误应改用单步或断点分段调试程序,排除软件错误,直至正确为止。
⑷改动40H、50H中的内容。
连续运行观察结果正确与否。
三、参考程序汇编程序:ORG 0000HAJMP MAINMAIN:MOV 40H,#60H /*将数据送到RAM的40H单元*/MOV 50H,#3CH /*将数据送到RAM的50H单元*/CLR A/*清累加器*/MOV R4,A/*存放转换后数据的寄存器R4,R5,R6*/MOV R5,AMOV R6,AMOV R7,#16BITBCD:CLR C /*C清零*/MOV A,50H /*将50H中的内容左移一位*/RLC AMOV 50H,AMOV A,40H /*将40H中的内容左移一位*/RLC AMOV 40H,AMOV A,R6 /*(R6)+(R6)+(C),和进行二-十进制调整,调整后的BCD码送R6中*/ADDC A,R6DA AMOV R6,AMOV A,R5 /*(R5)+(R5)+(C),和进行二-十进制调整,调整后的BCD码送R5中*/ADDC A,R5DA AMOV R5,AMOV A,R4 /*(R4)+(R4)+(C),和进行二-十进制调整,调整后的BCD码送R4中*/ADDC A,R4DA AMOV R4,ADJNZ R7,BITBCD /*判断循环完没*/END假设2字节二进制数存放在内部RAM0x35和0x36单元中(0x35放高位),转换结果存入0x37~0x39这3个单元中。
实验三 代码转换程序设计
MOV CH,AL;是则更新CH的值
INPUT
JUDGE
CMP AL,CL
JB K;
MOV CL,AL
JMP LOOP1
EXIT:PRESENT 0DH,0AH
MOV AH,09H
MOV DX,SEG STRING
MOV DS,DX
LEA DX,STRING
INT 21H
CMP CH,'0';判断最小数的符号是否为负(通过负数最高位是否被修改判断)
INT 21H
ILLEGAL PROC;显示不合法字符串
MOV AH,09H
MOV DX,SEG STRING1
MOபைடு நூலகம் DS,DX
LEA DX,STRING1
INT 21H
RET
ILLEGAL ENDP
CODE ENDS
END START
七、程序设计思路与总结
程序分为字符输入模块、字符显示模块、判断合法模块、以及主程序的比较模块。
CMP AL,'-';判断数的符号
JZ NEAR PTR NEGT;负数则转去NEGT处执行
JUDGE;判断数的合法性
CMP AL,BH;输入的值与最小正数的十位相比较
JNA NEXT;当前输入的值有可能比得到的最小数小
K: INPUT;把下一个不符合条件的字符读出
JMP NEAR PTR LOOP1
MOV CL,'0';CL中存放负的最小值的十位
MOV AH,09H
MOV DX,SEG STRING3
MOV DS,DX
LEA DX,STRING3
INT 21H
LOOP1: INPUT
试验报告数据转换代码
凝聚力: ^SCd; 内摩擦角: ^SJd;
有效凝聚力: ^SCd';内摩擦角: ^SJd';
八大参数:^SRb,^SRm,^SRk,^SRn,^SRf,^SRC,^SRJ,^SRd,^SRF,^SRG;
注: 以上X,Y分别为纵横比例或尺寸;
三、固结试验参数代码:
报告页号: ^GPn; 报告总页数: ^GMn;
工程编号: ^GSn; 土样编号: ^GTn; 钻孔编号: ^GKn;
试验方法: ^GMd; 试验日期: ^GDt; 仪 器 号: ^GYn;
筛孔直径: ^Ksd[n]; 留筛土重: ^Ksm[n];
吸取直径: ^Kpd[n]; 吸取质量: ^Kpm[n];
比重计编号: ^Khn; 量筒编号: ^Kcn;
比重试验所用试样干土重: ^Khm; 占总土质量百分数: ^Khd;
读数时间: ^Kht[n]; 悬液温度: ^KhT[n]; 比重计读数: ^KhR[n];
内排水与轴向应变关系曲线: ^PC:v-e(XxY);
轴向应变与侧向应变关系曲线: ^PC:e-e3(XxY), ^PC:h-e3(XxY) (变换纵轴);
Ei~σ3关系曲线: ^PC:Ei-s3(XxY);μi~σ3关系曲线: ^PC:ui-s3(XxY);
Bi~σ3关系曲线: ^PC:Bi-s3(XxY);
试后高度: ^sh'; 试后直经: ^sd'; 试后面积: ^sA'; 试后体积: ^sV';
竖向线缩率: ^sel; 竖向收缩系数: ^sCl; 体缩: ^ses;
代码转换实验报告
一、实验背景随着计算机技术的飞速发展,编程语言在各个领域得到了广泛的应用。
然而,不同的编程语言在语法、语义和功能上存在差异,使得程序员在编写程序时需要不断学习和适应新的语言。
为了提高编程效率和减少学习成本,代码转换技术应运而生。
代码转换技术可以将一种编程语言的代码自动或半自动地转换为另一种编程语言的代码,从而实现不同编程语言之间的代码共享和复用。
本实验旨在通过代码转换技术,实现C语言代码向Java语言的转换,并验证转换效果。
二、实验目的1. 熟悉代码转换技术的基本原理和方法。
2. 掌握C语言和Java语言的基本语法和特性。
3. 实现C语言代码向Java语言的转换,并验证转换效果。
4. 分析代码转换过程中可能存在的问题,并提出相应的解决方案。
三、实验内容1. 熟悉C语言和Java语言的基本语法和特性。
2. 分析C语言代码,确定其功能和结构。
3. 根据C语言代码的功能和结构,设计相应的Java代码。
4. 实现C语言代码向Java语言的转换,并进行验证。
四、实验步骤1. 选择一个简单的C语言程序作为实验对象。
2. 分析C语言程序的语法和功能,确定其结构。
3. 根据C语言程序的结构,设计相应的Java代码。
4. 实现C语言代码向Java语言的转换,包括以下步骤:a. 定义Java类和成员变量;b. 实现C语言程序中的函数,转换为Java方法;c. 调整C语言程序中的控制语句,转换为Java的控制语句;d. 转换C语言程序中的输入输出操作,转换为Java的输入输出操作;5. 编译Java代码,运行程序,验证转换效果。
五、实验结果与分析1. 实验结果本实验以一个简单的C语言程序为例,实现了其向Java语言的转换。
以下是C 语言和Java语言的代码对比:C语言代码:```c#include <stdio.h>int main() {int a = 10, b = 20;printf("The sum of a and b is: %d\n", a + b);return 0;}```Java语言代码:```javapublic class Sum {public static void main(String[] args) {int a = 10, b = 20;System.out.println("The sum of a and b is: " + (a + b));}}```2. 实验分析通过对比C语言和Java语言的代码,我们可以发现以下差异:a. 语法差异:C语言使用分号作为语句结束符,而Java使用大括号。
北理工大学计算机实验三 字符编码与信息交换
北理工大学计算机实验三字符编码与信息交换----d6624366-6eab-11ec-b02a-7cb59b590d7d北理工大学计算机实验三字符编码与信息交换实验报告实验名称:学生编号姓名班级实验时间年月日实验报告表3-1西文字符显示过程编码记录表输入字符5a,<ASCII码(十进制数)536560内存信息(二进制)0011010101000000111100显示字体码(十六进制)0FE008000800000008001400000060018实验报告表3-2汉字显示过程代码记录表编码类型汉字输入法汉字输入码机内码(十六进制)国标码(十六进制)区位码(十六进制)字形码(十六进制)输入字符1:“字”全拼输入zid7d6h5756373600080000000600000001c0000000c0000000c0000400800c07fffffe0c00001 c0c0000101c000020380001c01输入字符2:“形状”双输入XD0BEH503E301E0000000000000000000000000002000100000703C1FFF803018300600018300C 001830183018001830100018302000018304000FFC000000038000000700000000000000000000 0000000000000000E7FFFFFFF0000600000000600000000600000000600000000600000000fe000000FC0000001C0000018308040183201E0183701C3FFFFFFFFF8380010060018300C00183 08030003030400030318060303202203000E0630301C060300380403000000E0630300C0080308 01C060300380403000C008030801001C3000FFFFFFFF380010060018300C008030000C000实验报告表3-3不同字体的字体代码“字”的字形码字体(十六进制表示)宋体00080000000600000001c0000000c0000000c0000400800c二“形”的字形码(十六进制表示)0000000000000000000020210000703c1fff80300183006007fffffe0c00001c0c0000101c0000 20380001c001ffffc0000003800000070000000c000000180000006000000060040000600e7fff ffff00006000000060000000600000006000000060000000600000006000000060000000600000 3fe000000fc0000001c000018300c001830180018301000183020001830400018308040183201e 0183701c3ffff83801830060018300c001830180018303000303040003031806030320210303000e0603001c0603003804030060040300c0080303801003060030030c00000030000000c000黑体00080000000600000001c0000000c0000000000000000000000020210000703c三0000c0000400800c07fffffe0c00001c0c0000101c000020380001c001ffffc000000380000007 0000000c000000180000006000000060040000600e7fffffff0000600000006000隶书1FF8030001830060018300C00183018001830100018302000018304000018308040183201E0183 701C3FF83801830060018300C0018301800183030003030400030318060320224。
汇编语言代码转换程序实验报告
课程设计说明书题目: 代码转换程序院系:专业班级:学号:学生姓名:指导教师:2010 年 12 月 31 日安徽理工大学课程设计(论文)任务书计算机科学与工程学院硬件教研室2010年 12月 17安徽理工大学课程设计(论文)成绩评定表摘要本次课程设计的题目是代码转换,这是一个基于计算机和汇编环境的程序,主要就是通过完成这次设计,实现二进制,十进制,十六进制代码的转换,以及大小写字母之间的转换。
从而掌握不同进制数及编码相互转换的程序设计方法,知道将存储在内存单元中的数据以十六进制数、十进制数形式和二进制数形式显示在屏幕上的方法,加深对数码转换的理解。
而且学会用INT21功能实现人机对话掌握代码转换的基本方法。
该程序界面友好,能够通过键盘输入选择相应的转换,结果也能够比较直观的显示在我们眼前,具有一定的人机交互性。
关键词:代码,进制,大小写字母,转换,INT21,人机交互性目录1设计目的 (1)2概要设计 (2)2.1 系统总体分析 (2)2.2 主模块框图及说明 (2)3 详细设计 (4)3.1 主模块及子模块说明 (4)3.2 各模块详细设计 (4)4程序调试 (11)4.1 运行界面分析 (11)4.2算法的分析 (12)4.3 调试过程及分析 (13)5心得体会 (14)5.1 设计体会 (14)5.2 系统改进 (14)参考文献 (15)1设计目的在做本次课程设计之前,首先要了解设计的目的。
本次课程设计的题目是代码转换,这是一个基于计算机和汇编环境的程序,主要就是通过完成这次设计,实现二进制,十进制,十六进制代码的转换,以及大小写字母之间的转换。
从而掌握不同进制数及编码相互转换的程序设计方法,知道将存储在内存单元中的数据以十六进制数、十进制数形式和二进制数形式显示在屏幕上的方法,加深对数码转换的理解。
而且学会用INT21功能实现人机对话掌握代码转换的基本方法。
该程序界面友好,能够通过键盘输入选择相应的转换,结果也能够比较直观的显示在我们眼前,具有一定的人机交互性。
实验3-译码器和数据选择器
a f e d g b c
…… …… …… ……
数字显示译码器的接线
发光二极管可以单独封装, 发光二极管可以单独封装,也可以组合 封装为LED数码管。 LED数码管 封装为LED数码管。
25 50 100 200 0 K K K K
0 0
0 0 1 0 1 0 0 1 1
注意事项
①
;
思考题
① ②
选用74139和7400等芯片连接成全加器; 和 等芯片连接成全加器; 选用 等芯片连接成全加器 选用74153和7400等芯片连接成全加器; 等芯片连接成全加器; 选用 和 等芯片连接成全加器
实验操作
3、数据选择器的测试及应用
将双四选一数据选择器74153 74153中的一路输人和输出分 ( 1 ) 将双四选一数据选择器 74153 中的一路输人和输出分 别接电平开关和电平显示发光二极管, 别接电平开关和电平显示发光二极管 , 按表输人电平分别 置位,填输出状态表: 置位,填输出状态表:
实验原理
g f ab
a
f
e
g
b
c
d 发光二极管按驱动方式又分为共阳极和 共阴极接法。 共阴极接法。 ed c 共阳极接法 共阴极接法 输 输 V a b c d e f g 入 入 +5 高 低 有 有 效 效 a b c d e f
g
数据选择器
实验原理
在数字系统传输过程中,有时要从一组输入数据中, 在数字系统传输过程中,有时要从一组输入数据中,选择出 某一个数据,完成这种功能的逻辑电路称作数据选择器( 某一个数据,完成这种功能的逻辑电路称作数据选择器(或 称为多路选择开关)。数据选择器是一个多输入, )。数据选择器是一个多输入 称为多路选择开关)。数据选择器是一个多输入,单输出的 组合逻辑电路。 组合逻辑电路。
微机原理及接口技术实验3-码制转换
23 X2 02 23 03
AND AL,0FH
编程提示2 转换成ASCII码
分离后
大于9 (属于A~F) 转移至 L2 ADD AL,30h ;(属于0~9) JMP L1 L2: ADD AL,37H L1: [DI]AL ;保存ASCII码
程序结构
SI1000H DI1010H CL字节数 L5: AL [SI] ;高位处理 右移4次 AND AL,0FH 大于9 转移至 L2 ;转换成ASCII码 ADD AL,30h ;(属于0~9) JMP L1 L2: ADD AL,37H L1: [DI]AL ;保存ASCII码
AL [SI] ;低位处理 AND AL,0FH 大于9 转移至 L4 ;转换成ASCII码 ADD AL,30h ;(属于0~9) JMP L3 L4: ADD AL,37H L3: [DI+1] AL ;保存ASCII码 SI SI+1 DI DI+2 CL CL-1 JNC L5 INT 3
1000H 1001H 1002H 01 89 AB 1010H 1011H 1012H 1013H 30 31 38 39 41 42
030 高位
131 低位
1014H 1015H
பைடு நூலகம்
DI
编程提示1 高/低位处理---分离
高位处理 AL [SI] 右移4次
AND AL,0FH
低位处理 AL [SI]
计算机技术实验 ( I ) - 1
实验3 十六进制数转换成ASCII码
ASCII码----非数值信息表示
用一个字节的低7位编码,最高位置0 0XXXXXXX 00000000
算术运算与代码转换程序设计
实验三算术运算与代码转换程序设计一、实验目的1)掌握算术运算程序的设计方法。
2)掌握代码转换程序的设计方法。
3)进一步掌握各种程序结构。
4)熟练掌握和使用用DEBUG调试程序。
二、实验内容1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。
2)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。
3)编写程序把从键盘输入的以回车为结束符的字符串中的空格去掉并按相反的顺序输出。
三实验代码、实验1DATA SEGMENTNUM1 DB 22H,33H,44H,55H,66H,77HNUM1L DB 6HNUM2 DB 22H,22H,22H,22HNUM2L DB 4HOUTCOME1 DB 10H DUP(0)OUTCOME2 DB 10H DUP(0)N DB 0HDATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATAMOV DS,AXMOV CH,0MOV SI,OFFSET NUM1MOV DI,OFFSET NUM2MOV AH,NUM1LMOV AL,NUM2LCMP AH,ALJAE CHAXCHG SI,DIXCHG AH,ALCHA:SUB AH,ALMOV CL,ALCLCMOV BX,OFFSET OUTCOME1LOP1:MOV AL,[DI]PUSH CXMOV CL,[SI]ADC CL,ALMOV [BX],CLINC BXINC SIINC DIPOP CXLOOP LOP1MOV CL,AHJCXZ LOP3LOP2:PUSH CXMOV CL, BYTE PTR [SI]ADC CL,0MOV [BX],CLPOP CXINC BXINC SILOOP LOP2LOP3:MOV CH,0MOV SI,OFFSET NUM1MOV DI,OFFSET NUM2MOV AH,NUM1LMOV AL,NUM2LCMP AH,ALJAE CHA1XCHG SI,DIXCHG AH,ALCHA1:SUB AH,ALMOV CL,ALCLCMOV BX,OFFSET OUTCOME2LOP11:MOV AL,[DI]PUSH CXMOV CL,[SI]SBB CL,ALMOV [BX],CLINC BXINC SIINC DIPOP CXLOOP LOP11MOV CL,AHJCXZ LOP7LOP21:PUSH CXMOV CL, BYTE PTR [SI]SBB CL,0MOV [BX],CLPOP CXINC BXINC SILOOP LOP21LOP7:MOV DI,OFFSET OUTCOME1 ADD DI,10HMOV CX,11HLOP4: MOV DL,[DI]DEC DICMP N,0HJNE LOP5CMP DL,0HJE LOP9LOP5:PUSH DXPUSH CXMOV CL,4HSHR DL,CLPOP CXCMP DL,9HJBE LOP6ADD DL,7HLOP6:ADD DL,30HMOV AH,2INT 21HMOV N,1HPOP DXAND DX,0FHCMP DL,9HJBE LOP8ADD DL,7HLOP8:ADD DL,30HMOV AH,2INT 21HMOV DL,'H'MOV AH,2INT 21HLOP9:LOOP LOP4MOV N,0MOV DI,OFFSET OUTCOME2 ADD DI,10HMOV CX,11HLOP14: MOV DL,[DI] DEC DICMP N,0HJNE LOP15CMP DL,0HJE LOP19LOP15:PUSH DXPUSH CXMOV CL,4HSHR DL,CLPOP CXCMP DL,9HJBE LOP16ADD DL,7HLOP16:ADD DL,30HMOV AH,2INT 21HMOV N,1HPOP DXAND DX,0FHCMP DL,9HJBE LOP18ADD DL,7HLOP18:ADD DL,30HMOV AH,2INT 21HMOV DL,'H'MOV AH,2INT 21HLOP19:LOOP LOP14MOV AH,4CHINT 21HCODE ENDSEND START实验2DATA SEGMENTTISHI1 DB 'Please enter the first number:','$' TISHI2 DB 'Please enter the second number:','$' JIA DB '+','$'JIAN DB '-','$'CHENG DB '*','$'CHU DB '/','$'DENG DB '=','$'YU DB '......','$'A DB 10B DW 10C DW 10000F DW 0HNUM1 DW 0HNUM2 DW 0HN DB 0HN1 DB 4HDATA ENDSSTACK1 SEGMENT STACKDW 30H DUP(0)STACK1 ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET TISHI1MOV AH,09HINT 21HLOOP2:MOV AX,NUM1MUL BMOV BX,AXMOV AH,1INT 21HCMP AL,0DHJE LOP1MOV NUM1,BXMOV AH,0SUB AL,30HADD NUM1,AXJMP LOOP2LOP1:MOV DL,0AH ;输出换行和回车MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DX,OFFSET TISHI2MOV AH,09HINT 21HLOOP1:MOV AX,NUM2MUL BMOV BX,AXMOV AH,1INT 21HCMP AL,0DHJE LOP3MOV NUM2,BXMOV AH,0SUB AL,30HADD NUM2,AXJMP LOOP1LOP3:MOV DL,0AH ;输出换行和回车MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV N,0MOV DX,NUM1MOV F,DXLOP6:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP7MOV F,AXJMP LOP6LOP7:MOV CL,NMOV CH,0LOP16:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOP16MOV DX,NUM2MOV F,DXMOV N,0MOV DX,OFFSET JIAMOV AH,09HINT 21HLOOOP6:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP7MOV F,AXJMP LOOOP6LOOOP7:MOV CL,NMOV CH,0LOOOP16:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOOP16MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0LOOP3:MOV AX,NUM1ADD AX,NUM2MOV F,AXLOOP4:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP5MOV F,AXJMP LOOP4LOOP5:MOV CL,NMOV CH,0LOOP0:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOP0MOV DL,0AH ;输出换行和回车MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV N,0MOV DX,NUM1MOV F,DXLOP61:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP71MOV F,AXJMP LOP61LOP71:MOV CL,NMOV CH,0LOP161:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOP161MOV DX,NUM2MOV F,DXMOV N,0MOV DX,OFFSET JIANMOV AH,09HINT 21HLOOOP61:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP71MOV F,AXJMP LOOOP61LOOOP71:MOV CL,NMOV CH,0LOOOP161:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOOP161MOV DX,OFFSET DENGMOV AH,09HINT 21HMOV N,0MOV N,0MOV AX,NUM1SUB AX,NUM2MOV F,AXAND AX,10000000BCMP AX,10000000BJNE LOOP6NEG FLOOP6:MOV DX,0MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP7MOV F,AXJMP LOOP6LOOP7:MOV CL,NMOV CH,0LOOP16:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOP16MOV DL,0AH ;输出换行和回车MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV N,0MOV DX,NUM1MOV F,DXLOP62:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP72MOV F,AXJMP LOP62LOP72:MOV CL,NMOV CH,0LOP162:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOP162MOV DX,NUM2MOV F,DXMOV N,0MOV DX,OFFSET CHENGMOV AH,09HINT 21HLOOOP62:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP72MOV F,AXJMP LOOOP62LOOOP72:MOV CL,NMOV CH,0LOOOP162:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOOP162MOV DX,OFFSET DENGINT 21HMOV N,0MOV AX,NUM1MUL NUM2DIV CPUSH DXMOV F,AXMOV N,0 LOOP8:MOV DX,0MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP9MOV F,AXJMP LOOP8 LOOP9:MOV CL,NMOV CH,0 LOOP17:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOP17MOV N,0POP FLOOP10:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP11MOV F,AXJMP LOOP10 LOOP11:MOV AL,NCMP AL,4HJE LOOP20MOV AL,4HSUB AL,NMOV CL,ALMOV CH,0 LOOP19:MOV DX,'0'INT 21HLOOP LOOP19LOOP20:MOV CL,NMOV CH,0LOOP18:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOP18MOV DL,0AH ;输出换行和回车MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV N,0MOV DX,NUM1MOV F,DXLOP64:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP74MOV F,AXJMP LOP64LOP74:MOV CL,NMOV CH,0LOP164:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOP164MOV DX,NUM2MOV F,DXMOV N,0MOV DX,OFFSET chuMOV AH,09HINT 21HLOOOP64:MOV DX,0HMOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP74MOV F,AXJMP LOOOP64 LOOOP74:MOV CL,NMOV CH,0LOOOP164:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOOP164MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0MOV AX,NUM1MOV DX,0DIV NUM2PUSH DXMOV F,AXMOV N,0LOOP15:MOV DX,0MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP12MOV F,AXJMP LOOP15LOOP12:MOV CL,NMOV CH,0LOOP21:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOP21MOV DX,OFFSET YU MOV AH,09HINT 21HPOP FMOV N,0LOOP13:MOV DX,0MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP14MOV F,AXJMP LOOP13LOOP14:MOV CL,NMOV CH,0HLOOP22:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOP22MOV AH,4CHINT 21HCODES ENDSEND START实验3DATA SEGMENTLENG DW 0HDATA ENDSSTACK1 SEGMENT PARA STACKDW 30H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATAMOV DS,AXLOOP1:MOV AH,1INT 21HCMP AL,20HJE LOOP1INC LENGMOV AH,0PUSH AXCMP AL,0DHJNE LOOP1MOV DL,0AH ;输出换行和回车MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HPOP DXDEC LENGMOV CX,LENGLOOP2:POP DXMOV AH,2INT 21HLOOP LOOP2MOV AH,4CHINT 21HCODE ENDSEND START四实验结果实验1结果实验2结果实验3结果五实验心得1.计算机中处理的信息不全是数,有时需要处理字符或字符串,因此,计算机中必须能表示字符。
微机原理与接口技术实验——码转换报告
一、实验内容:编制程序,把十进制数15786转化成二进制数。
提示:15786=1×10×10×10×10+5×10³+7×10²+8×10+6循环CX=5实验要求:1.绘出练习1和2的程序流程图。
2编写完整的程序,上机调试。
3使用DEBUG调试命令,查看中间结果,并查看最终结果。
二、程序清单DATA SEGMENTBUFFER1 DD 15786DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,BUFFER1 ;取出十进制数的首地址MOV BX,[SI] ;将首地址的内容放到寄存器MOV CX,16 ;循环次数NEXT1:MOV DL,31H ;1SHL BX,1 ;左移一位,将最高位移到进位位中JC NEXT2 ;进位位为1,即最高位为1,跳转输出1MOV DL,30H ;否则输出0NEXT2:MOV AH,02HINT 21HLOOP NEXT1 ;循环MOV AH,4CHINT 21HCODE ENDSEND START程序流程图见下页:程序流程图三、运行结果程序编译:程序链接:程序运行结果:程序运行结果:15786十进制数转换为二进制输出为0011 1101 1010 1010四、调试分析及体会调试分析:在此次编程中第一次编出的程序经过编译没有错误之后经过链接运行结果不正确。
首先自己进行检查,通过检查发现自己没有认真,在编写程序时,误把十进制数15786写成了16进制,写为了15786H(因为这个自己一直没有检查出来,还在调试如何改正),后来检查了出来。
因为这个缘故,在进行把数字取出放入寄存器的时候,由于BX是16位数据寄存器,而20位的数放不下,于是在循环输出二进制数时,首先不会输出20位,其次输出的结果是与15786H相关的二进制,结果完全错误。
通信原理课程教案-实验三-AMI-HDB3-编译码过程实验
实验3 AMI / HDB3编译码过程实验(理论课:教材第六章P132--142)实验内容1.AMI/HDB3码型变换编码观察实验2.AMI/HDB3码型变换译码观察实验一、实验目的编译码的工作过程。
1.熟悉AMI / HDB3码型变换编译码电路的测量点波形。
2.观察AMI / HDB3码型变换的规则3.掌握AMI/HDB3二、AMI / HDB3码型变换编译码原理回顾数字传输系统中,传输的数字信息可以是计数机、数传机等数据终端的各种数字代码,也可以是来自模拟信号经数字化处理的脉冲编码(PCM)信号。
在原理上,数字信息可以直接用数字代码序列表示和传输,但在实际传输中,一般要进行不同形式的编码,并且选用一组取值有限的离散波形来表示。
这些取值离散的波形可以是未经调制的电信号,也可以是调制后的信号。
1数字基带信号:未经调制的数字信号就是基带信号(频带从0频或很低的频率开始)它是数字信息的电波形表示,可以用不同的电平或脉冲来表示相应的消息代码。
数字基带传输系统:不经载波调制而直接传输数字基带信号的系统称为数字基带传输系统数字基带信号的类型有很多,有:单极性波形、双极性波形、单极性归零波形、双极性归零波形、差分波形、多电平波形等。
数字基带传输系统常用的几种传输码型。
AMI码就是其中一种码型。
1、AMI码原理与编码规则AMI码的全称是传号交替反转码。
是将消息代码“1”(传号)交替地变换为“+1”和“—1”而“0”(空号)保持不变AMI码对应的波形是具有正、负、零三种电平的脉冲序列。
他可以看成是单极性波形的变形,即“0”仍对应零电平,而“1”交替对应正、负电平。
由于AMI码的信号交替反转,故由它决定的基带信号将出现正负脉冲交替,而0电位保持不变的规律。
由此看出,这种基带信号无直流成分,且只有很小的低频成分,因而它特别适宜在不允许这些成分通过的信道中传输。
2从AMI码的编码规则看出,它已从一个二进制符号序列变成了一个三进制符号序列,而且也是一个二进制符号变换成一个三进制符号。
源码转化为补码实验报告(3篇)
第1篇一、实验目的1. 理解并掌握源码和补码的概念。
2. 掌握源码转化为补码的原理和方法。
3. 能够熟练进行源码与补码之间的转换。
二、实验原理1. 源码:在计算机中,一个数的表示方法可以是它的实际数值,这种表示方法称为源码。
对于正数,源码就是它的二进制表示;对于负数,源码是其绝对值的二进制表示,符号位为1。
2. 补码:补码是一种用于表示有符号整数的编码方法。
对于正数,补码与源码相同;对于负数,补码是其绝对值的二进制表示取反加1。
3. 源码转化为补码的方法:(1)对于正数,补码与源码相同。
(2)对于负数,将绝对值的二进制表示取反加1。
三、实验器材1. 计算机2. 编程软件(如C语言、Python等)四、实验步骤1. 编写程序,输入一个整数,判断其正负。
2. 如果是正数,直接输出其源码和补码。
3. 如果是负数,将绝对值的二进制表示取反加1,得到补码。
4. 输出源码、补码及转换过程。
五、实验数据及结果以输入整数-10为例,进行源码转化为补码的实验。
1. 输入整数-10。
2. 判断-10为负数。
3. 计算-10的绝对值,即10。
4. 将10的二进制表示取反加1,得到补码。
5. 10的二进制表示为1010,取反为0101,加1为0110。
6. 因此,-10的源码为10010,补码为0110。
实验结果如下:源码:10010补码:0110六、实验总结1. 通过本次实验,我们掌握了源码和补码的概念,以及源码转化为补码的原理和方法。
2. 在实际编程中,了解源码与补码的转换对于理解计算机中的有符号整数运算具有重要意义。
3. 实验过程中,我们使用了编程软件进行源码与补码的转换,提高了编程能力。
4. 本次实验加深了我们对计算机中数值表示方法的理解,为后续学习计算机组成原理、操作系统等课程打下了基础。
七、实验拓展1. 编写程序,实现任意整数的源码与补码之间的转换。
2. 研究补码在计算机中的具体应用,如加减法运算。
3. 探究不同计算机体系结构中,源码与补码的表示方法。
实验三 代码转换
电工电子实验中心实验报告课程名称:计算机硬件技术基础实验名称:代码转换姓名:学号:评定成绩:审阅教师:实验时间:2017.05.02南京航空航天大学一、实验目的要求1) 掌握 ASCII 码转换的基本方法。
2) 学会 INT21 功能调用, 掌握人机对话的设计方法。
3) 进一歩熟悉 Tddebug 调试环境和 Turbo Debugger 的使用。
二、实验任务从键盘输入小写字母(最多 20 个),以“.”号作为结束标志, 将其变换成相应的大写字母输岀在屏幕上。
三、实验代码CRLF MACROMOV DL, 0DHMOV AH, 02HINT 21HMOV DL, 0AH ;宏定义回车,换行MOV AH, 02HINT 21HENDMDATA SEGMENTMES1 DB 'PLEASE INPUT THE SMALL LETTER,ENDED WITH ".":$'MES2 DB 'THE CAPTAL LETTER IS:$'SMALL DB 50 ;?预留键盘输入缓冲区长度为50个DB 0 ;?预留实际键盘输入字符数的个数DB 50 DUP(0)CAPITAL DB 50 DUP('$') ;?预留大写字母缓冲区长度为50个DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP (0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START PROC FARPUSH DSMOV AX, 0PUSH AXMOV AX, DATAMOV DS, AXMOV AH, 9LEA DX, MES1 ;输岀提示信息MES1INT 21HCRLF ;宏调用MOV AH, 0AHLEA DX, SMALL;接收小写字符串INT 21HCRLF ;宏调用MOV BX,2LABEL:MOV AL, SMALL[BX]CMP AL,'a'JL LABEL1CMP AL,'z'JG LABEL1MOV CAPITAL[BX-2], ALSUB CAPITAL[BX-2], 20HJMP LABEL2LABEL1:MOV CAPITAL[BX-2],ALLABEL2:INC BXCMP SMALL[BX],46JNE LABELKE: MOV AL,'$';大写字符串后加“$”MOV SMALL[BX], ALMOV DX, OFFSET MES2 ;?输岀提示信息MES2 MOV AH, 9INT 21HCRLF ;宏调用MOV DX, OFFSET CAPITALMOV AH, 9 ;?输岀大写字符串INT 21HRETSTART ENDPCODE ENDSEND START四、实验数据五、探究内容1) 若从键盘输入的字符非小写字母,其 ASCII 码减去 20H 后输出为无关字符,如何在程序中避免以上问题?在程序中,先做了判断是否非小写字符,如果是就过滤掉该字符,用空格占位六、实验讨论及心得体会宏定义的使用省去了许多重复的工作,简化了代码的书写,有利于在编程过程中保持清晰的思路。
代码转换(大小写字母转换)
代码转换(大小写字母转换)北华航天工业学院课程设计报告(论文)设计课题:代码转换大小写字母转换专业班级:电子信息工程学生姓名:指导教师:设计时间: 2010-12-16北华航天工业学院电子工程系微机原理课程设计任务书指导教师:教研室主任:年月日内容摘要在课程设计之前,具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法是必不可少的。
因此原理部分重新温习并整理了相关知识。
课程设计要求进行大小写字母的转换。
其实字母大小写的区别在于他们的ASCII码范围,它们之间的转换其实就是加减相应的ASCII码值。
在判断输入的字母是大写的还是小写的(即判断输入符号ASCII码在41H~5AH还是在61H~7AH内)之后,决定判断是加上还是减去ASCII码值。
关键词:汇编代码转换大小写目录一、概述 (1)二、方案设计与论证 (1)1.汇编语言基础 (1)2.方案设计 (2)三、程序设计 (3)1.程序设计流程图 (3)2.程序代码 (4)四、运行结果 (5)五、心得体会 (6)六、参考文献 (6)一、概述:在计算机系统中有多种数制和编码,常用的数制有二进制、八进制以及十六进制,常用的代码有BCD码、ASCll码和七段显示码等。
这些数制和编码根据其作用的不同,在存储形式上也有差异。
在实际应用中,它们也因使用的要求不同而有所差异。
在配备操作系统管理程序的计算机中,有些代码转换程序已在系统管理软件中编好。
还有些代码转换需要根据使用要求通过编程完成。
因此,代码转换是非数据处理中最常见的情况。
二、方案设计:1、汇编语言基础汇编:计算机不能直接识别和执行汇编语言程序,而要通过“翻译”把源程序译成机器语言程序(目标程序)才能执行,这一“翻译”工作称为汇编。
汇编有人工汇编和计算机汇编两种方法。
汇编语言是面向机器的,每一类计算机分别有自己的汇编语言。
汇编语言占用的内存单元少,执行效率高,广泛应用于工业过程控制与检测等场合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电工电子实验中心
实验报告
课程名称:计算机硬件技术基础实验名称:代码转换
姓名:学号:
评定成绩:审阅教师:实验时间:2017.05.02
南京航空航天大学
—
一、实验目的要求
1) 掌握 ASCII 码转换的基本方法。
2) 学会 INT21 功能调用, 掌握人机对话的设计方法。
3) 进一歩熟悉 Tddebug 调试环境和 Turbo Debugger 的使用。
二、实验任务
从键盘输入小写字母(最多 20 个),以“.”号作为结束标志, 将其变换成相应的大写字母输岀在屏幕上。
三、实验代码
CRLF MACRO
MOV DL, 0DH
MOV AH, 02H
INT 21H
MOV DL, 0AH ;宏定义回车,换行
MOV AH, 02H
INT 21H
ENDM
DATA SEGMENT
MES1 DB 'PLEASE INPUT THE SMALL LETTER,ENDED WITH ".":$'
MES2 DB 'THE CAPTAL LETTER IS:$'
SMALL DB 50 ;?预留键盘输入缓冲区长度为50个
DB 0 ;?预留实际键盘输入字符数的个数
DB 50 DUP(0)
CAPITAL DB 50 DUP('$') ;?预留大写字母缓冲区长度为50个
DATA ENDS
STACK1 SEGMENT STACK
DB 100 DUP (0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START PROC FAR
PUSH DS
MOV AX, 0
PUSH AX
—
MOV AX, DATA
MOV DS, AX
MOV AH, 9
LEA DX, MES1 ;输岀提示信息MES1
INT 21H
CRLF ;宏调用
MOV AH, 0AH
LEA DX, SMALL;接收小写字符串
INT 21H
CRLF ;宏调用
MOV BX,2
LABEL:
MOV AL, SMALL[BX]
CMP AL,'a'
JL LABEL1
CMP AL,'z'
JG LABEL1
MOV CAPITAL[BX-2], AL
SUB CAPITAL[BX-2], 20H
JMP LABEL2
LABEL1:
MOV CAPITAL[BX-2],AL
LABEL2:
INC BX
CMP SMALL[BX],46
JNE LABEL
KE: MOV AL,'$';大写字符串后加“$”
MOV SMALL[BX], AL
MOV DX, OFFSET MES2 ;?输岀提示信息MES2
MOV AH, 9
INT 21H
CRLF ;宏调用
MOV DX, OFFSET CAPITAL
MOV AH, 9 ;?输岀大写字符串
INT 21H
RET
START ENDP
CODE ENDS
END START
—四、实验数据
五、探究内容
1) 若从键盘输入的字符非小写字母,其 ASCII 码减去 20H 后输出为无关字符,如何在程序中避免以上问题?
在程序中,先做了判断是否非小写字符,如果是就过滤掉该字符,用空格占位六、实验讨论及心得体会
宏定义的使用省去了许多重复的工作,简化了代码的书写,有利于在编程过程中保持清晰的思路。
学会了ASCII 码转换的基本方法。