汇编实现大小写字母转换
- 格式:doc
- 大小:27.50 KB
- 文档页数:3
摘要在课程设计之前,具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法是必不可少的。
因此原理部分重新温习并整理了相关知识。
课程设计要求进行大小写字母的转换。
其实字母大小写的区别在于他们的ASCII码范围,它们之间的转换其实就是加减相应的ASCII码值。
在判断输入的字母是大写的还是小写的(即判断输入符号ASCII码在41H~5AH还是在61H~7AH内)之后,决定判断是加上还是减去ASCII码值。
另外如果输入的不是字母(输入字符对应ASCII码值不在41H~5AH或61H~7AH内),则需要报警提示,这不但涉及到用汇编语言实现发声的方法,而且对计算机硬件的了解也有要求,因此原理部分加入了部分有关声音产生的硬件知识。
关键词:汇编语言,ASCII码,大小写转换1.原理简介1.1 8086的内部结构80x86从功能上分执行单元EU(Execution Unit),和总线接口单元BIU(Bus Interface Unit),执行单元由算术逻辑单元(ALU)、标志寄存器、通用寄存器组和EU控制器等部件组成。
指令执行部件EU由算术逻辑单元、标志寄存器、通用寄存器和EU控制器等部件组成。
主要功能是执行指令:一般顺序执行,EU不断地从指令队列中取指令连续执行,而省去访问存储器取指令的时间。
需要访问存储器取操作数时,EU将访问地址送给BIU后,将要等待操作数到来后才能继续操作;遇到转移类指令时,要将指令队列中的后续指令作废,等待BIU重新从存储器取出目标地址中的指令代码进入指令队列后,EU才能继续执行指令。
算术逻辑单元(ALU)完成16位或8位的二进制运算;16位暂存寄存器用来暂存参加运算的操作数。
运算结果通过内部总线送到通用寄存器组或BIU的内部寄存器中等待写入存储器。
经ALU运算后的结果特征置入标志寄存器中保存EU控制器负责从BIU的指令队列中取指令,并对指令译码;根据指令要求向EU内部各部件发出控制命令以完成各条指令的功能。
⽤汇编进⾏⼤⼩写转换最近学习了⼀下8086的16位汇编语⾔,学习了⼀种⽐较奇葩的进⾏字母⼤⼩写转换的⽅法。
不必⽤CMP语句进⾏判断,⼀步到位。
当然前提要求是输⼊的数据必须是字母哈。
把字母的ASCII码⽤⼆进制查看:⼤写 16进制⼆进制⼩写 16进制⼆进制A 41 0100 0001 a 61 0110 0001B 42 0100 0010 b 62 0110 0010C 43 0100 0011 c 63 0110 0011D 44 0100 0100...Z 5A 0101 1010 z 7A 0111 1010明显的,⼩写的ASCII值 = ⼤写的ASCII值 + 20H⽽且,⼩写的和⼤写的在第5位是完全不同的,⼤写的恒为0,⼩写的恒为1于是,可以⽤位运算。
assume cs:code, ds:datadata segmentdb 'baSiC'db 'InFOinTion'data endscode segmentstart: mov ax, datamov ds, ax ;数据域对应datamov bx, 0mov cx, 5s: mov al, [bx]and al, 11011111b ;转换成⼤写mov [bx], alinc bxloop smov bx, 5mov cx, 10s1: mov al, [bx]or al, 00100000b ;转换成⼩写mov [bx], alinc bxloop s1mov ax, 4c00hint 21hcode endsend start对应的C++语⾔:#include <cstdio>using namespace std;int main(){char a[9] = "aBcdeFGh";char b[9] = {0};char c[9] = {0};for (int i=0; i<9; i++)b[i] = a[i] & 0xDF; //转换成⼤写for (int i=0; i<9; i++)c[i] = a[i] | 0x20; //转换成⼩写return 0; }。
英⽂字母⼤⼩写转换程序设计(2)摘要 (1)数制转换 (2)1 DOS功能调⽤介绍 (2)2 设计⽅案 (5)3 总程序 (6)4 程序流程图及程序设计分析 (13)4.1主程序流程图 (13)4.2主程序流程图分析 (14)4.3⼤⼩写转换⼦程序ABC (14)4.3.1 ⼦程序ABC (14)4.3.2 ⼦程序ABC的流程图 (16)4.3.3 ⼦程序ABC流程图分析 (16)4.4ASCII码转换⼦程序CBA (17)4.4.1 ⼦程序CBA (17)4.4.2 ⼦程序CBA的流程图 (18)4.4.3 ⼦程序ABC流程图分析 (18)5 程序运⾏实例 (19)5.1⼤⼩写转换 (20)5.2ASCII码转换 (20)5.3输⼊⾮字符 (21)5.4调试中出现的错误 (21)6 ⼼得体会 (23)参考⽂献 (24)摘要汇编语⾔是直接⾯向处理器(Processor)的程序设计语⾔。
处理器是在指令的控制下⼯作的,处理器可以识别的每⼀条指令称为机器指令。
每⼀种处理器都有⾃⼰可以识别的⼀整套指令,称为指令集。
处理器执⾏指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变⾃⼰内部的⼯作状态,也能控制其它外围电路的⼯作状态。
汇编语⾔的主要特点是可以使⽤助记符来表⽰机器指令的操作码和操作数,可以⽤标号和符号来代替地址、常量和变量。
这次课程设计的任务是⽤汇编语⾔进⾏⼀个数制转换,从键盘输⼊⼀串字符(⾮字符则不接受),通过屏幕提⽰菜单选择转换成ASCII码,或者进⾏⼤⼩写转换(原来是⼤写转换成⼩写,⼩写则转换为⼤写)并显⽰。
先输⼊要转换的数据,再对数据进⾏检验判断其合法性,对不合法的数据进⾏警报并重新输⼊数据,对合法的数据按照要求进⾏⼤⼩写转换或者转换成ASCII,码,最后显⽰转换后的字符串。
关键词:DOS功能调⽤ ASCII码⼤⼩写转换数制转换1 DOS功能调⽤介绍DOS是⼀个磁盘操作系统,也称为IBM-DOS或者MS-DOS。
大小写转换代码在编程中,大小写转换是一个常见的需求。
有时候我们需要将字符串中的所有字母转换成大写或小写,有时候我们需要将字符串中的首字母大写。
在这篇文章中,我们将介绍如何使用代码实现这些转换。
将字符串转换成大写在Python中,我们可以使用upper()方法将字符串中的所有字母转换成大写。
下面是一个例子:```string = "hello world"string_upper = string.upper()print(string_upper)```输出结果为:```HELLO WORLD```在这个例子中,我们首先定义了一个字符串变量string,然后使用upper()方法将其转换成大写,并将结果存储在另一个变量string_upper中。
最后,我们使用print()函数输出结果。
将字符串转换成小写与将字符串转换成大写类似,我们可以使用lower()方法将字符串中的所有字母转换成小写。
下面是一个例子:```string = "HELLO WORLD"string_lower = string.lower()print(string_lower)```输出结果为:```hello world```在这个例子中,我们首先定义了一个字符串变量string,然后使用lower()方法将其转换成小写,并将结果存储在另一个变量string_lower中。
最后,我们使用print()函数输出结果。
将字符串中的首字母大写有时候我们需要将字符串中的首字母大写,可以使用capitalize()方法实现。
下面是一个例子:```string = "hello world"string_capitalize = string.capitalize()print(string_capitalize)```输出结果为:```Hello world```在这个例子中,我们首先定义了一个字符串变量string,然后使用capitalize()方法将其首字母大写,并将结果存储在另一个变量string_capitalize中。
北华航天工业学院课程设计报告(论文)设计课题:代码转换大小写字母转换专业班级:电子信息工程学生姓名:指导教师:设计时间: 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. Python:在Python中,可以使用内置的upper()方法将字符串中的小写字母转换为大写字母。
```string = "hello world"uppercase_string = string.upper()print(uppercase_string) # 输出 "HELLO WORLD"```2. JavaScript:在JavaScript中,可以使用内置的toUpperCase()方法将字符串中的小写字母转换为大写字母。
```let string = "hello world";let uppercaseString = string.toUpperCase();console.log(uppercaseString); // 输出 "HELLO WORLD"```3. Java:在Java中,可以使用String类的内置方法toUpperCase()将字符串中的小写字母转换为大写字母。
```String string = "hello world";String uppercaseString = string.toUpperCase();System.out.println(uppercaseString); // 输出 "HELLO WORLD" ```4. C++:在C++中,可以使用算法库中的transform()函数结合toupper()函数将字符串中的小写字母转换为大写字母。
```cpp#include <iostream>#include <algorithm>#include <cctype>int main() {std::string str = "hello world";std::transform(str.begin(), str.end(), str.begin(),[](unsigned char c){ return std::toupper(c); });std::cout << str << std::endl; // 输出 "HELLO WORLD"return 0;}```5. C#:在C#中,可以使用内置的ToUpper()方法将字符串中的小写字母转换为大写字母。
《微机原理综合训练》设计任务书题目:大小写字母转换程序设计学生姓名:学号:班级:题目类型:设计性指导教师:一、课程设计题目大小写字母转换程序设计。
二、题目简介以大小写字母为背景,对大小写字母的转换程序进行分析和设计。
通过该题目的分析和设计,学习微机软、硬件系统设计开发过程,加深微机原理及应用课程基础知识的理解和综合运用能力,熟悉集成电路芯片的使用方法,熟悉微机编程及接口电路,学习体会工程实际设计的过程,培养学生独立解决实际工程问题的综合能力。
学生初步得到用汇编语言书写程序的训练,全面培养程序设计过程中的分析、设计、编码、测试及文档规范书写的能力,得到运用汇编语言的综合训练,提高解决实际问题的能力。
三、设计任务学生通过该题目的设计过程,可以初步掌握汇编语言的运用、软件开发方法并提高解决实际问题的能力。
设计任务为:从键盘输入一串英文字符,若是小写字母则转换成大写字母在下一行输出,若是大写字母则转换成小写字母在下一行输出,若不是英文字符则显声响报警。
程序采用汇编语言在PC机上完成,同时完成符合学校要求的设计计算说明书。
提倡创新。
四、设计要求1.利用Intel 8086 CPU及其相应的外围扩展电路及接口电路,设计系统硬件原理图,并绘制于2号工程图纸。
2.给出程序的设计思路,设计系统软件流程框图,并绘制于2号工程图纸。
3.完成设计计算说明书。
五、提交的成果1. 设计计算说明书一份,包括以下内容:(1) 封面;(2) 设计任务书(3) 课题摘要;(4) 目录;(5) 正文:①简要说明本设计的基本内容、用途及特点;②方案比较及论证;③硬件系统说明(硬件设计思路、系统构成框图、芯片选择、存储空间与I/O地址分配);④画出完整的硬件电路图,并说明电路的工作原理;⑤软件系统说明(软件设计思路、源程序清单及必要的注释);⑥主要单元电路的设计及参数计算;⑦列出所用元器件及集成芯片型号;⑧指出所设计电路的特点和方案的优缺点;⑨总结体会;⑩参考文献。
一、概念解释在计算机编程领域,C++语言是一种十分常用的编程语言,它具有灵活性和高效性,被广泛应用于各种软件开发领域。
在实际的编程过程中,经常会遇到需要将小写字母转化为大写字母的情况,这在处理字符串、文本分析等方面都非常常见。
二、转化方法在C++语言中,要实现将小写字母转换为大写字母,有多种方法可以选择。
一种常见的方法是使用标准库中的 toupper 函数,这个函数能够将一个小写字母转化为大写字母。
另外,也可以通过计算ASCII码的方式来实现字母大小写的转化,因为大写字母和小写字母在ASCII 码中是有规律可循的,通过加减特定的数值就可以完成转化。
三、示例代码接下来,我将给出一个C++的示例代码,用来演示如何将小写字母转化为大写字母:```cpp#include <iostream>#include <cctype> // 包含头文件,这个头文件中包含了 toupper函数的声明int main() {char lowercase = 'a'; // 定义一个小写字母char uppercase = toupper(lowercase); // 调用 toupper 函数将小写字母转化为大写字母std::cout << "小写字母 " << lowercase << " 被转化为大写字母 " << uppercase << std::endl; // 输出转化结果return 0;}```通过这个示例代码,可以清楚地看到如何利用 toupper 函数来实现小写字母到大写字母的转化,这也是C++中常见的做法。
四、个人观点在实际的软件开发中,对于字符串的处理和转化是非常常见的需求,而字母大小写的转化就是其中一个常见的问题。
在C++中,通过使用标准库中的 toupper 函数可以很方便地实现这个功能,同时也可以通过其他方法来完成转化。
汇编实战⼀:⼤写字母转换成⼩写形式DATAS SEGMENT;此处输⼊数据段代码str1 db "Please enter a captial letter:"db 0dh,0ah,'$'str2 db "Error Input"db 0dh,0ah,'$'DATAS ENDSSTACKS SEGMENT;此处输⼊堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输⼊代码段代码MOV dx,offset str1MOV ah,9int 21hMOV ah,01int 21hCMP al,41H ;将al与ASCII码为41H的字符⽐较JB exitCMP al,5AH ;将al与ASCII码为5AH的字符⽐较JA exitADD al,32 ;⼤写转⼩写MOV dl,al ;打印语句MOV ah,02int 21hMOV AH,4CH ;结束INT 21Hexit: ;之前⽐较的时候,如果错误,跳转到这个⼊⼝MOV dx,offset str2MOV ah,9int 21hMOV ah,4chint 21hCODES ENDSEND START写完了之后主要感受就是虽然是更接近底层的汇编语⾔,但其实其内容很多还是框架形式的,有点像 java 和 c++ 的⼀些结构框架,直接⽤就⾏,⽐如MOV ah,4ch int 21h 就是代表结束,有点像封装的意思,很多都是⼀⽤就是很⼤块的完整代码,只需要改其中的⼀些参数就可以了。
[应用]汇编语言编程键盘输入的小写字母换成大写汇编语言编程键盘输入的小写字母换成大写用汇编语言编程,要求键盘输入的小写字母换成大写我这个程序如果输入小写,则转换成大写输出;如果输入大写,则转换成小写输出。
cseg segmentassume cs:cseg begin:mov ah,1int 21hxor al,20hmov dl,almov ah,2int 21hmov ah,4chint 21h cseg endsend begin……BUF DB "please input:$"……start: mov ax,datamov ds,axlea dx,BUFmov ah,9int 21hlopa: mov ah,10 ;10号调用输入字符串int 21hmov dl,alcmp dl,'a'jb Lcmp dl,'z'ja Lsub dl,20hL: mov ah,2int 21hEXIT: mov ah,4chint 21h……汇编程序:从键盘输入一串小写字母转换成大写 2007年12月04日星期二12:44 ;从键盘输入一行字符把其中的小写字母转换成大写字符输出,其它字符原样输出data segmentchars db 200 dup(?) ;开辟200字节的缓冲区 data ends;--------------------------------- code segmentassume cs:code,ds:datastart :push dsmov ax,0push axmov ax,datamov ds,axlea bx ,charsmov si,0mov ch,0;----------------------输入字符子程序 scanf:mov ah,1int 21hcmp al,0dhjz crtcmp al,61hjnb alsub ;al>='a' mov [bx],alinc bxinc chjmp scanf;-------------------------- ;-----------------------输出字符crt:mov dl,chars[si] mov ah,2int 21hinc sidec chjz exitjmp crt;---------------------- exit:mov ah,4chint 21h;---------------------- alsub:cmp al,7ah ;al<='z'jbe alsub20hmov [bx],alinc bxinc chjmp scanf;--------------------- alsub20h:sub al,20hmov [bx],alinc bxinc chjmp scanf;---------------------code endsend start汇编语言编程问题:用键盘输入一个字符串,含有若干大小写字母,数字,要求统计出三种类型各有多少个,并显示浏览次数:465次悬赏分:10 | 解决时间:2010-11-1 11:14 | 提问者:木易秋心这是微机原理课程上的一道上机实验题,所知道的解题思路为:需要分析其输入与输出的内容,根据ASC码进行比较来确定各类型的数量,最后显示出来使用的是2号功能调用。
电子科技大学计算机工程学院标准实验报告(实验)课程名称电子科技大学教务处制表电子科技大学实验报告实验一学生姓名:穆萨·图拉克学号:2012060090033 指导教师:实验地点:主楼A2-412 实验时间:19:00~一、实验室名称:二、实验项目名称:汇编源程序的上机调试操作基础训练三、实验学时:四、实验原理:(包括知识点,电路图,流程图)DEBUG 的基本调试命令;汇编数据传送和算术运算指令MASM宏汇编开发环境使用调试方法五、实验目的:1. 掌握DEBUG 的基本命令及其功能2. 学习数据传送和算术运算指令的用法3. 熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程六、实验内容:(介绍自己所选的实验内容)1. DEBUG命令的使用2. 程序的调试与运行3. 编写程序计算以下表达式:Z=(5X+2Y-7)/2设X、Y的值放在字变量V ARX、V ARY中,结果存放在字节单元V ARZ中。
七、实验器材(设备、元器件):WinXP PC机,MASM,50 ,VisulASM软件平台。
八、实验步骤:(编辑调试的过程)1.编辑源程序,建立一个以后缀为.ASM的文件.2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。
无错时继续第3步。
3.连接目标程序,产生可执行程序。
4.用DEBUG程序调试可执行程序,记录数据段的内容。
九、实验数据及结果分析:(实验运行结果介绍或者截图,对不同的结果进行分析)程序说明:功能:本程序完成Z=(5X+2Y-7)/2这个等式的计算结果求取。
其中X 与Y是已知量,Z是待求量。
结构:首先定义数据段,两个DB变量VARX与VARY(已经初始化),以及结果存放在VARZ,初始化为?。
然后定义堆栈段,然后书写代码段,代码段使用顺序程序设计本程序,重点使用MOV和IMUL以及XOR,IDIV完成程序设计。
详细内容见程序注释。
程序清单:DATA SEGMENTVARX DB10VARY DB10VARZ DB?DATA ENDSSTACK SEGMENT PARA STACKSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMAIN:MOV AX,DATAMOV DS,AXMOV AL,VARXMOV AH,VARYSAL AL,1SAL AL,1ADD AL,VARXSAL AH,1ADD AL,AHSUB AL,7SAR AL,1MOV VARZ,ALMOV AH,4CHINT21HCODE ENDSEND MAIN程序框图:结束调试说明:将汇编语言(.asm文件)通过masm命令转换为目标程序(.obj 文件),通过link命令转换为目标程序可执行程序(.exe文件); 这次试验还要用-p参数以及d参数显示结果为:十、实验结论:(联系理论知识进行说明)通过本次实验,我们学习了解掌握了DEBUG 的基本命令及其功能,学习了数据传送和算术运算指令的用法,熟悉了在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
实验1 汇编语言选择结构程序设计班级xxxxx 学号xxxxx 姓名xxxxxx实验题目:完善例子:要求连续将键盘输入的小写字母转为大写字母,字母之间用“-”号间隔;若输入大写字母则直接输出,其他字符则不处理和输出,提示重新输入。
实验目的:1. 掌握选择结构程序设计;2. 掌握跳转类指令的使用;4. 掌握MASM、LINK、DEBUG等工具的使用。
实验设备:硬件:PC机软件:DOS操作系统、编辑软件、MASM 5.0实验内容:1.程序代码DA TA SEGMENTSTR DB 'Wrong word!Please input again:$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AH,01HINT 21HMOV BL,AL ;保存在BL中MOV DL,'-' ;送‘-’号到DLMOV AH,02H ;显示‘-’INT 21H ;取回输入的字符MOV AL,BLCMP AL,'a' ;与‘a’比较JB A;小于‘a’转ACMP AL,'z' ;与‘z’比较JA EXIT ;大于‘z’转到EXITSUB AL,20H ;取大写字母MOV DL,AL ;输出MOV AH,02HINT 21HC: MOV DL,0AH ;输出换行MOV AH,02HINT 21HMOV DL,0DH ;输出回车MOV AH,02HINT 21HJMP START ;无条件转A: CMP AL,'A'JAE BJB DCMP AL,'Z'JBE BB: MOV DL,ALMOV AH,02HINT 21HLOOP CD: MOV BX,DA TA;请重新输入MOV DS,BXLEA DX,STRMOV AH,09HINT 21HLOOP BJMP STARTMOV AH,4CHINT 21HEXIT: MOV AH,4CHINT 21HCODE ENDSEND START2.调试过程如下图所示:(具体应用DEBUG指令及其结果)使用DEBUG调试过程以及程序运行结果如下所示:实验思考与总结:通过这次实验,使我对汇编语言的源程序结构有了一个系统地认识,并且掌握了选择结构程序设计,掌握了跳转类指令的使用和几种常见的DOS功能的使用;以及MASM、LINK、DEBUG等工具的使用,由于初次编写汇编程序,在实验过程中遇到了很多问题,但通过查看课本和请教老师,最终完成了实验,达到了实验的目的。