实验1 汇编语言语法练习与代码转换

合集下载

汇编语言代码转换 大小写,二进制,十进制,16进制的相互转换

汇编语言代码转换 大小写,二进制,十进制,16进制的相互转换

《微机原理与接口技术》课程设计(学年论文)说明书课题名称:代码转换程序设计(A3-2)学生学号:专业班级:学生姓名:学生成绩:指导教师:***课题工作时间: 2011-6-13 至 2011-6-18武汉工程大学教务处制填写说明:1. 一、二、三项由指导教师在课程设计(学年论文)开始前填写并交由学生保管;2. 四、五两项由学生在完成课程设计后填写,并将此表与课程设计一同装订成册交给指导教师;3. 成绩评定由指导教师按评定标准评分。

4. 此表格填写好后与正文一同装订成册。

课程设计评审标准(指导教师用)代码转换程序设计说明书1、方案论证(1)大小写字母、二进制与十六进制、十六进制与十进制的转换方法在计算机系统中有多种数制和编码,常用的有二进制,八进制以及16进制。

这些数制和编码虽然在储存形式上各有差异,但彼此也相互联系。

大小写转换,主要利用小写字母比大小字母大20H的关系,将小写字母减20H就转换为大写字母,将大写字母加20H就转换为小写字母。

二进制,十进制以及16进制,主要利用0到9的数值等于相应ASCALL码减30H,而A到F的数值等于相应ASCALL码减37H,这样即可利用移位,除十取余取整等方法实现其相互转换。

(2)宏汇编程序设计要点宏是源程序中的一段有独立功能的程序代码。

宏指令,用户自定义的指令。

编程序时候,将多次使用的功能用一条宏指令来代替。

汇编包括指令,伪指令,宏指令。

前两个都是规定的,最后一个是自己设计的。

好处是用起来方便定义,但是要先定义,后调用,其优点是可以随时随地的调用宏汇编程序。

2、程序设计(1)总体设计对“实现从键盘输入16位二进制数,转换成4位十六进制数显示出来。

”的分析处理。

首先将键盘输入的二进制数以二进制形式储存起来:每次输入,将其ASCALL码值将减去30H,然后左移一位,在然后与下个输入的减30H的数相加,这样就将键盘输入的值以二进制形式储存在寄存器中.二进制转换为16进制数输出:用循环指令左移四位,取出最低4位,利用16进制所对应的ASCALL码值比其本身大30H或37H的关系,将低位转换成对应的ASCALL码值,再调用DOS系统显示字符功能,将转换后的字符显示出来,如此循环四次即可.程序总流程图:(2)程序设计二进制转十六进制流程图:程序代码及注释:;PUBLIC XPEXTRN INFO4:BYTE,INFO1:BYTE,INFO2:BYTECODE SEGMENTXP PROC FARASSUME CS:CODECALL DEC2BIN ;调用将键盘输入的ASCALL值转换为二进制数LEA DX,INFO2MOV AH,9INT 21H ;显示提示信息CALL BIN2HEX;调用将储存的二进制转换为16进制函数MOV DL,'H'MOV AH,2INT 21HRETCAL: MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HLEA DX,INFO4MOV AH,9INT 21H;输入非二进制数,显示错误DEC2BIN PROC NEARLEA DX,INFO1MOV AH,9INT 21H;显示提示信息XOR BX,BX ;BX清零NEWCHAR: MOV AH,1INT 21H ;键盘输入,存放在AL中CMP AL,0DHJE RE;如果输入回车键,键盘输入结束SUB AL,30HJL CALCMP AL,1JG CAL ;输入为非二进制数,显示错误并退出CBWXCHG AX,BXMOV CX,2MUL CXXCHG AX,BXADD BX,AXJMP NEWCHAR;将键盘输入的制转换为二进制数,存放在BX中,并且每输入一个值,先将BX左移一位再相加. RE: MOV DL,'B'MOV AH,2INT 21HRETDEC2BIN ENDPBIN2HEX PROC NEARMOV C H,4ROTATE: MOV CL,4ROL BX,CL ;BX每左移4位输出,四位二进制表示一位十六进制MOV A L,BLAND A L,0FHADD A L,30HCMP A L,3AHJL PRINTIT ;结果若为0到9的数,则加30H后直接输出ADD AL,07H ;结果若为A到F的数,则加30H后再加07H直接输出PRINTIT: MOV DL,ALMOV AH,2INT 21HDEC CHJNE ROTATERETBIN2HEX ENDPCRLF PROC NEARMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;回车换行RETCRLF ENDPXP ENDPCODE ENDSEND3、程序调试步骤与结果(1)编辑源程序(2)汇编源程序(3)连接程序(4)在TD中调试程序(5)程序运行结果结果说明:当输入小写字母(如a)时,就转换成相应的大写字母(如A),反之亦然;当如入二进制(如1011B),,就转换成相应的十六进数(000BH),反之亦然;如果输入的字母或数字不符合要求,就会显示“INPUT ERROR”4、结论。

汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令‎练习的实验报告总结‎汇编语言指令及伪指令‎练习的实验报告总结‎‎篇一:汇‎编语言实验报告福建‎农林大学金山学院课‎程名称:姓‎名:系:‎专业:‎年级:学‎号:指导教师‎:职称:‎ (程序设计类‎课程) 实验报告汇‎编语言 201X~2‎01X学年第二学期‎实验项目列表福建农‎林大学金山学院实验报‎告系:专‎业:年级:‎姓名:‎学号:‎实验课程:‎汇编语言实验室号:‎_ _1#6‎05 实验设备号:‎ I3 实验时‎间:201‎X.4.25‎指导教师签字:‎成绩:‎实验一汇编程序的‎汇编及运行1‎.实验目的和要求‎ (1)熟悉汇编程‎序的汇编、连接、执行‎过程;(2)‎生成LST文件,查看‎L ST文件;‎(3)生成BJ文件,‎修改语法错误;‎(4)生成EXE文‎件;(5)执‎行程序。

2.‎实验环境 IBM—P‎C机及其兼容机;实‎验的软件环境是:‎操作系统:‎ DS2.‎0以上;调试程序:‎ DEBUG.C‎M;文本编程程序:‎ EDIT.EX‎E、PS.EXE;宏‎汇编程序:M‎A SM.EXE(或A‎S M .EXE);连‎接装配程序:‎L INK .EXE;‎交叉引用程序:‎CREF.EXE(‎可有可无)。

‎3.实验内容及实验数‎据记录(1)‎将数据段输入,取名‎ 1.txt,保存‎在MASM文件夹下。

‎生成LST文件,(不‎必连接、运行)用ED‎I T查看1.L‎S T文件。

试回答:‎ DA1,DA2‎的偏移量分别是多少?‎C UNT的值为多少?‎DATA SEGM‎E NT RG 20H‎NUM1=8 NU‎M2=NUM1+10‎H DA1 DB ‘‎I BM PC’ CU‎N T EQU $-D‎A1 DATA EN‎D S DA2 DB ‎0AH, 0DH E‎N D(2)输‎入有错误的文件,修改‎错误语句。

(MASM‎没有出现错误即可。

不‎必连接、运行。

)‎D ATA SEGME‎N T VAR1 DB‎0, 25, DH‎,300 VAR2‎DB 12H, A‎4H, 6BH VA‎R3 DB ’ABC‎D EF’ VAR4 ‎D 1H, 5678‎H VAR5 D 1‎0H DUP(?) ‎D ATA ENDS ‎C DE SEGMEN‎T ASSUME C‎S: CDE, DE‎: DATA MV ‎D S, AX LEA‎SI, VAR5 ‎M V BX, FFS‎E T VAR2 MV‎[SI], 0AB‎H MV AX, V‎A R1+2 MV [‎B X], [SI] ‎M V VAR5+4,‎VAR4 MV A‎H, 4CH INT‎21H ENDS ‎E ND START ‎B EING MV A‎X, DATA CD‎E(3)输入‎正确的程序,汇编、连‎接、运行 STACK‎S SEGMENT ‎S TACK D 12‎8DUP(?) E‎N DS SEGMEN‎T ENDS SEG‎M ENT ASSUM‎E CS: CDES‎,DS: DATA‎S STACKS D‎A TAS DATAS‎CDES STRI‎N G DB ‘ELC‎M E!’, 13, ‎10, ‘$’ ST‎A RT: M‎V AX, DATA‎S MV DS, A‎X LEA DX, ‎S TRING MV ‎A H, 9 INT ‎21H MV AH,‎4CH INT 2‎1H CDES EN‎D S END STA‎R T4.算法‎描述及实验步骤 1)‎首先,用记事本输入‎各段程序,并储存成源‎程序,保存在MASM‎目录下。

代码转换程序

代码转换程序

的部分结果*2(采用十进制加法)
SAL
DX,1 ;移出最高位
ADC AL,0 ;部分和加下一位的值
LOOP BTOBCD1
POP CX
;恢复现场
RET
BTOBCD ENDP
<>
汇编语言程序设计
在计算机中表示十进制数一般采用8421的BCD编码,分为压缩 的BCD码和非压缩的BCD码,两者的不同在于表示的位数,一个字 节表示一位十进数为非压缩的BCD码;一个字节表示两位十进制数 是压缩的BCD码。而ASCII码对十进制数据0~9的编码是30H~39H。
<>
转换程序
⑴ ASCII码转换为非压缩BCD码 若ASCII存于AL中,使用指令AND AL,0FH,则AL成为非压缩的 BCD码。
RCL BX,1
LOOP BCD2
Байду номын сангаасADD AX,BX ;部分和+下一位十进制数
POP CX
LOOP BCD1
POP CX
;恢复现场
POP BX
RET
BCDTOB
ENDP
<>
1.3 二进制数转换为十进制数
转换原理:
(1)利用除法实现转换:(用于较小的二进制数的转换)
例如:将一个8位二进制数(<256)转换为十进制数。可将二进制数÷100, 商是十进制数的百位,余数再÷10,商是十位,余数为个位。
BTOBCD PROC NEAR
;保护现场
PUSH
XOR
XOR ;存储部分和结果
MOV ;转换16位二进制数
BTOBCD1:
ADD
DAA
XCHG
ADC
DAA

汇编语言代码转换程序设计

汇编语言代码转换程序设计

信息工程学院课程设计报告设计题目:______代码转换程序设计______名称: 微机原理与接口课程设计班级:_______通信工程1002班______姓名:_______卓自强_王可______学号: ____2010013544 2010013524__设计时间: 至指导教师:__________卢清平____________评语:评阅成绩: 评阅教师:一、程设计的性质和目的通过课程设计,进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关软件程序设计的基本知识和基本方法,硬件电路的设计等,通过实际动手能力的培养,进一步熟悉汇编语的结构和使用方法,掌握软硬结合的控制程序设计,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平,增进对汇编语言的认识,加强用汇编语言编程的能力;掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等。

了解和掌握汇编语言程序设计过程、方法及实现,为以后相关的课程的学习打下良好基础。

二、课程设计要求1、遵循模块化、结构化的程序设计方法。

2、要求程序必须正确。

3、程序简明易懂,多运用输入输出提示,有出错信息及必要的注释。

4、要求程序结构合理,语句使用得当。

5、适当追求编程技巧和程序运行效率。

三、主要仪器设备及软件Pc机,MASM汇编软件,绘图软件,等四、课程设计题目及要求题目:代码转换程序要求:完成一个字母或数制之间的转化程序,主程序分别具有5种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“q”键退出。

5种可选择的子功能分别为:1)实现小写字母向大写字母的转换2)实现大写字母向小写字母的转换3)实现二进制数向十六进制数的转换4)实现十六进制数向二进制数的转换5)实现十六进制数向十进制数的转换五、课题分析及设计思路1、实现大小写字母之间的转换:输入的字符串中,不是字母的字符不改变;大写字母改成小写字母时,若是大写字母则不改变;同样,小写字母改成大写字母时,若是小写字母则不改变2、二进制和十六进制数之间的转换:输入一个二进制数(或十六进制数),用十六进制数(或二进制数)表示输出;最多能把十六位二进制数(或四位十六进制数)用四位十六进制数(或十六位二进制数)表示输出;小于十六位(或四位)时按“q”结束并输出3、十进制数和十六进制数之间的转换:输入一个十六进制数,用十进制数表示输出;最大能把十六进制数FFFF转换成十进制数65535表示输出;小于FFFF时按“q”结束并输出整个程序由四个主要的子程序和若干个辅助子程序组成,实现六个转换功能:HEXIDEC用来把一个十六进制数转换成十进制数表示BINARY用来把十六制数转换为十六位二进制数表示BETOHE用来把一个十六位二进制数转换成十六进制输出1、INPUT用来输入字符串2、HEXIBIN用来输入一个十六进制数,并存放在BX中3、BINIDEC用来把BX中十六进制转换到十进制4、DEC_DIV用来除以各位十进制的权5、PRINT用来把BX中的十六进制数转换成二进制8、INBIN输入十六二进制数9、CRLF用来换行六、程序主要流程等于1调用BTOS 等于2调用STOB等于3调用HTOB等于4调用BTOH等于5调用HTOD调用INPUT 宏展开GAIXIE七、程序及主要代码与分析7.1程序及主要代码GAIXIE MACRO P1,P2,P3,P4,P5,P6 ;义该宏用来判定字母? P2: CMP BYTE PTR [SI],P3JB P5CMP BYTE PTR [SI],P4JNB P5CMP BYTE PTR [SI],'$' ;到$则结束JZ P6P1 BYTE PTR [SI],20HP5: INC SILOOP P2P6: LEA DX,BUF1+2 ;出改写后的字母MOV AH,9 ;调用9号中断功能,输出字符串INT 21HLEA DX,BF ;把BF首地址给CXMOV AH,9 ;调用9号中断功能INT 21HJMP START ;返回ENDMDA TA SEGMENT ;义数据段BUF DB '**********choose the operation**********',0DH,0AH DB '1:big to small',0DH,0AHDB '2:small to big',0DH,0AHDB '3:hexadecimal to binary',0DH,0AHDB '4:binary to hexadecimal',0DH,0AHDB '5:hexadecimal to decimal',0DH,0AHDB '6/q:EXIT',0DH,0AH,'$'BF DB 0DH,0AH,'$'BUF1 DB 21,?,20 DUP(?) ;用来存放输入的字符串BUF2 DB 'enter a hex data:$'BUF3 DB 'The input is wrong,choose again please:$'BUF4 DB 'enter a deci data:$'BUF5 DB 'enter a bin data:$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DA TAMOV DS,AXMOV DX,OFFSET BUF ;出选择界面MOV AH,9 ;调用9号中断功能INT 21HMOV AH,1 ;入要选择的操作INT 21HPUSH AX ;NT 会改变AL的值,应压栈保护LEA DX,BF ;行MOV AH,9 ;调用9号中断功能INT 21HPOP AX ;把AX压栈保护CMP AL,'1' ;把AL中内容跟1比较JZ BTOS ;相等则跳转到CMP AL,'2'JZ STOBCMP AL,'3'JZ HTOBCMP AL,'4'JZ BTOHCMP AL,'5'JZ HTODCMP AL,'6'JZ EXITCMP AL,71HJZ EXITLEA DX,BUF3 ;把BUF3的首地址给DXMOV AH,9INT 21HCALL CRLF ;调用子程序CALLJMP START ;返回,重新选择EXIT:MOV AH,4CH ;退出INT 21HBTOH:CALL BETOHE ;调用二进制转十六进制子程序HTOB:CALL BINARY ;调用十六进制转二进制子程序HTOD:CALL HEXIDEC ;调用十六进制转十进制子程序BTOS:CALL INPUT ;大写字母改为小写MOV CX,20 ;作为循环条件GAIXIE ADD,NEXT1,'A','Z',N1,N2 ;宏GAIXIE展开STOB:CALL INPUT ;小写字母改为大写MOV CX,20GAIXIE SUB,NEXT2,'a','z',N3,N4INPUT PROC NEAR ;输入字符串MOV DX,0 ;DX清零MOV DX,OFFSET BUF1 ;把BUF1的首地址给DXMOV AH,10 ;调用10号中断功能,输出字符串INT 21HLEA DX,BF ;把BF首地址给DXMOV AH,9INT 21HLEA SI,BUF1+2MOV BL,[SI-1] ;把输入的字符个数给BLMOV BH,0 ;BH清零MOV BYTE PTR [BX+SI+1],'$' ;把$作为字符串结束字符LEA DX,BUF1+2MOV AH,9INT 21HRET ;返回INPUT ENDPHEXIDEC PROC NEAR ;用该子程序把一个十六进制数转换成十进制数表示PUSH DS ;保护初始数据段SUB AX,AX ;AX清零PUSH AX ;把AX压栈保护START1: LEA DX,BUF2MOV AH,9INT 21HCALL HEXIBIN ;调用输入一个十六进制数子程序CMP AL,71H ;遇q则退出JZ EXIT1CALL CRLF ;换行CALL BINIDECCALL CRLFJMP START1 ;返回EXIT1:RETHEXIDEC ENDPHEXIBIN PROC NEAR ;输入一个十六进制数,并存放在BX中MOV BX,0 ;把BX清零MOV DX,0 ;作为输入四位的记数器INHEX:CMP DX,4 ;把DX跟4比较JNB HEXEND ;大于则跳转MOV AH,1 ;输入数据INT 21HCMP AL,71H ;遇到q则退出JZ HEXENDSUB AL,30H ;判断是否数字或字母?否则跳出JL HEXENDCMP AL,10 ;判断是否数字JL ADD_TO ;是则存放BX中SUB AL,7 ;把AL内容减7转为字母CMP AL,10 ;判断是否小写字母(a~f)JL HEXENDCMP AL,16JL ADD_TO ;小于则跳转SUB AL,20H ;判断是否大写字母(A~F)CMP AL,10JL HEXENDCMP AL,16JGE HEXENDADD_TO:MOV CL,4 ;作为循环条件SHL BX,CL ;BX乘以16MOV AH,0ADD BX,AX ;两数相加INC DX ;DX加1JMP INHEXHEXEND:RETHEXIBIN ENDPBINIDEC PROC NEAR ;用来把BX中十六进制转换到十进制MOV CX,10000 ;把10000给CX,作为万位的权CALL DEC_DIV ;调用除权子程序MOV CX,1000CALL DEC_DIVMOV CX,100CALL DEC_DIVMOV CX,10CALL DEC_DIVMOV CX,1CALL DEC_DIVRETBINIDEC ENDPDEC_DIV PROC NEAR ;除以各位十进制的权MOV AX,BX ;把BX内容给AXMOV DX,0 ;DX清零DIV CXMOV BX,DXMOV DL,ALADD DL,30H ;转换为ASSIIMOV AH,2INT 21HRETDEC_DIV ENDPCRLF PROC NEAR ;换行LEA DX,BFMOV AH,9INT 21HRETCRLF ENDPBINARY PROC NEAR ;该子程序用来把十六制数转换为十六位二进制数表示START2:LEA DX,BUF2MOV AH,9INT 21HPUSH DS ;把DS压栈SUB AX,AX ;AX清零PUSH AXCALL HEXIBINCMP AL,71HJZ EXIT2CALL CRLFCALL PRINTCALL CRLFJMP START2EXIT2:RETBINARY ENDPPRINT PROC NEAR ;把BX中的十六进制数转换成二进制MOV CX,16D ;记数ROT: SHL BX,1D ;每移一位最高位变为CFJC SET ;CF为1则跳到SET,否则输出0MOV DL,30HMOV AH,2INT 21HDEC CXJNZ ROTRETSET:MOV DL,31H ;输出1MOV AH,2INT 21HDEC CXJNZ ROTRETPRINT ENDPDECIBIN PROC NEAR ;输入一个五位的十进制数MOV BX,0MOV CX,0NEWCHAR:CMP CX,5JNB EXIT4MOV AH,1INT 21HCMP AL,71HJZ EXIT4SUB AL,30HJL EXIT4CMP AL,9JG EXIT4CBWINC CXXCHG AX,BXMOV DX,10MUL DXXCHG AX,BXADD BX,AXJMP NEWCHAREXIT4:RETDECIBIN ENDPBINIHEX PROC NEAR ;把BX中的十进制数转换成十六进制输出MOV CH,4ROTA TE:MOV CL,4ROL BX,CL ;把BX中高四位移到低四位,放到AL中MOV AL,BLAND AL,0FHADD AL,30HCMP AL,3AH ;判断是否为数字JL PRINTITADD AL,7PRINTIT:MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTA TERETBINIHEX ENDPBETOHE PROC NEAR ;用该子程序来把一个十六位二进制数转换成十六进制数START3:LEA DX,BUF5MOV AH,9INT 21HPUSH DSSUB AX,AXPUSH AXCALL INBINCMP AL,71HJZ EXIT5CALL CRLFCALL BINIHEXCALL CRLFJMP START3EXIT5:RETBETOHE ENDPINBIN PROC NEAR ;输入十六二进制数MOV BX,0MOV CX,0PUTIN:CMP CX,16JNB EXIT6MOV AH,1INT 21HCMP AL,1BHJZ EXIT6SUB AL,30HJL EXIT6CMP AL,1JG EXIT6CBWINC CXXCHG AX,BXMOV DX,2MUL DXXCHG AX,BXADD BX,AXJMP PUTINEXIT6:RETINBIN ENDPCODE ENDSEND START7.2算法分析小写字母的ASCII码比大写字母的ASC码大20H,因此,大写字母转换成小写字母就是将大写字母的ASCII码加20H,反之,小写字母转换成大写字母就是将小写字母的ASCII码减20H。

汇编语言常见问题实验报告带正确源代码

汇编语言常见问题实验报告带正确源代码

汇编语言常见问题实验报告(带正确源代码)汇编语言程序设计实验报告计科0803余廷钊2008420692010 7-7实验一:字符回显实验目的:掌握DOS 1号功能的调用。

实验原理:ah 里面放功能号。

用int21调用。

实验内容:code segment assume cs:code start :mov ah,1 ;功能号放入ah int 21h ;调用DOS 功能 mov ah,4ch ;返回DOS int 21h code ends end start结果分析:DOS 1号功能可以把键盘的输入回显到屏幕上。

技术支持:Michael 实验二:显示字符T实验目的:开ah=1int21h结掌握DOS 2号功能的调用。

实验原理:ah 里面放功能号。

DL 里面放要显示的字符,用int21调用。

实验内容:code segment assume cs:code start :mov dl,'T'mov ah,2 ;功能号存入int 21h ;调用 mov ah,4chint 21h code ends end start 技术支持:Michael结果分析:DOS 2 号功能可以吧 DL 中的数据按照它对应的ASK 码字符输出。

实验三:显示‘how are you ’实验目的:掌握利用DOS 功能显示字符串。

实验原理:DOS 9 号功能可以把DS :DX 中的字符串显示出来,一‘$’为结束识别。

实验内容: data segment开ah=2 int21h结DL=‘T ’message db 'How are you?',13,10,'$' data ends code segmentassume cs:code,ds:data start :mov ax,datamov ds,ax ;数据段地址给ds mov ah,9mov dx,offset message ;送入偏移地址int 21h ;功能调用mov ah,4ch int 21h code ends end start结果分析:DOS 9 号功能可以把以DS :DX 为首地址,以‘$’为结束的字符串输出。

实验1---汇编语言语法练习与代码转换

实验1---汇编语言语法练习与代码转换

实验报告( 2015/ 2016 学年第二学期)课程名称微型计算机原理与接口技术实验名称实验时间指导单位指导教师学院学号指导老师实验报告三、实验过程描述与结果分析汇编语言源程序编写好以后,必须经过下列几个步骤才能在机器上运行:(1) 编辑源程序(生成.ASM文件)(2) 汇编源程序(.ASM → .OBJ)(3) 目标程序(.OBJ → .EXE )(4) 调试可执行程序(使用调试程序Debug调试生成的.EXE文件)(5) 运行程序输出结果。

排除语法错误要求通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序。

但有很多语法错误,要求按照原样对源程序进行编辑,汇编后,根据TASM给出的错误信息对源程序进行修改,直到没有语法错误为止,然后进行,并执行相应的可执行文件。

正确的执行结果是在屏幕上显示:25+9=34。

修改后代码:(分号后为修改);FILENAME:EXA121.ASM.486DATA SEGMENT USE16SUM DB ?,?,MESG DB '25+9= 'DB 0,0 ;DB 0,0,'$'N1 DB 9,F0H ;DB 9,0F0HNEXT: ADD [BX+8],SUM ;NEXT:MOV CL,SUMADD BYTE PTR [BX+8],CL ADD [BX+7],30H ;ADD BYTE PTR [BX+7],30HADD [BX+8],30H ;ADD BYTE PTR [BX+8],30HRETCHANG:ENDPCODE ENDSEND BEG。

汇编实验代码+报告

汇编实验代码+报告

汇编实验报告一、大小写字母的转换:从键盘上输入字符串含大小写字母,实现大写变小写,小写变大写。

并可以实现多次循环操作。

程序源代码:DATAS SEGMENT ;数据段定义MESSAGE DB 'Hello Welcome to the COLLECTION system!',13,10DB 'The function of the program is changing small letters to capital letters and capital letters to small letters.',13,10DB 'If you not enter as rules everything may happen.',13,10DB 'Now Please enter a string.',13,10,'$';界面里要显示输出的话CR DB 13,10,'$' ;换行回车符STRING DB 100DB 0DB 200 DUP(0) ; ;内存的开辟AGAIN DB 'Do you want to try again?(Y or N)',13,10,'$' ;界面里要显示输出的话DATAS ENDS ;数据段定义结束STACKS SEGMENT ;堆栈段定义DB 400 DUP(?);内存的开辟STACKS ENDS ;堆栈段定义结束CODES SEGMENT ;定义代码段ASSUME CS:CODES,DS:DATAS,SS:STACKS ;由ASSUME定义各段寄存器的内容START: 程序入口HEAD:MOV AX,DATASMOV DS,AX ;对DS初始化LEA DX,MESSAGE ;取地址MOV AH,09HINT 21H ;显示输出LEA DX,STRINGMOV AH,0AHINT 21H ;输入字符串LEA DX,CRMOV AH,09HINT 21H ;回车换行LEA SI,STRING+2 ;取字符串的首地址MOV CL,STRING+1 ;置入循环计数值MOV CH,0 ;高位置零NEXT1:MOV DL,[SI] ;将字符存入DLCMP DL,'A'JB NEXT2CMP DL,'z'JA NEXT2CMP DL,'a'JB NEXT3 ;分别比较,如果小于A直接跳转,大于Z也直接跳转,进行下一轮循环,小于a跳转进行加运算,否则进行减运算SUB DL,20H ;减运算NEXT2:MOV AH,02HINT 21H ;显示字符INC SIDEC CX ;计数值减一,地址值加一,以指向下一字符JNE NEXT1 ;跳回原循环MOV DX,OFFSET CRMOV AH,09HINT 21H ;回车换行JMP EXIT ;当计数值为0时,结束NEXT3:ADD DL,20H ;加运算MOV AH,02HINT 21H ;显示字符INC SIDEC CXJNE NEXT1EXIT:LEA DX,CRMOV AH,09HINT 21HLEA DX,AGAIN ;选择是否继续MOV AH,09HINT 21HMOV AH,01HINT 21HLEA DX,CRMOV AH,09HINT 21HCMP AL,'Y'JNZ OVERJMP HEADCMP AL,'y'JNZ OVERJMP HEADCMP AL,'N'JZ OVERCMP AL,'n'JZ OVER ;选择是否继续的指令OVER:INT 21H ;束指令CODES ENDSEND START;程序结束程序运行结果:二、字符串匹配程序输入一个字符串,同时输入一个需要匹配的字符,如找到显示Match,否则显示 NO match程序源代码:注:实验中相似的部分如在上一程序中注释的本程序不再详述。

实验一 汇编语言基本指令操作练习

实验一 汇编语言基本指令操作练习

实验一汇编语言基本指令操作练习一、实验目的:1、掌握8086/8088基本指令的使用方法和功能。

2、初步了解汇编语言程序设计的基本结构和利用DEBUG调试程序的方法。

3、进一步熟悉汇编语言的上机过程。

二、上机实验指导:(一)利用DEBUG的A命令输入指令,做如下实验。

1、比较下面指令的区别:①MOVAX,2000H②MOVBX,[2000H]-D2*******;显示字存储单元DS:2000的内容3ADC:20005A58ZX-R;显示指令执行前AX,BX的内容AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=3ADCES=3ADCSS=3ADCCS=3ADCIP=0100NVUPEIPLNZNAPONC3ADC:0100858CFFF3TESTCX,[SI+F3FF]DS:F3FF=74C0-A;利用A命令输入汇编指令3ADC:0100MOVAX,20003ADC:0103MOVBX,[2000]3ADC:0107INT3;此中断为断点中断,使程序执行暂停3ADC:0108-G;不指定地址,从当前CS:IP处执行AX=2000BX=585ACX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=3ADCES=3ADCSS=3ADCCS=3ADCIP=0107NVUPEIPLNZNAPONC3ADC:0107CCINT3;指令执行后,AX=2000H,BX=585AH2、以寄存器BX作为地址指针,从BX所指的存储单元开始起,连续存放着两个无符号数(字操作数),编程求它们的和,并将结果存放在这两个数之后。

-RBX;显示BX寄存器中的内容(BX=0000h)BX0000:;回车-D0*******;显示DS:0000到DS:0005的内容(BX所指的三个字操作数),如BX不为0000H,自己修改范围。

实验1-汇编语言语法练习与代码转换

实验1-汇编语言语法练习与代码转换
8
六、指导教师评语 (含学生能力达成度的评价)
成绩
批阅人
日期
评分项 评 遵守实验室规章制度
学习态度
算法思想准备情况
程序设计能力

解决问题能力
课题功能实现情况
算法设计合理性
算法效能评价
回答问题准确度

报告书写认真程度
内容详实程度
文字表达熟练程度
其它评价意见
则 本次实验能力达成评价 (总成绩)
优秀
良好
; 程序跳转,如果最高位 是 1 那么就输出 1
JNC print0_max ;程序跳转, 如果最高位 是 0 那么就输出 0
Hale Waihona Puke print1_max: MOV DL , 31h ;把要在屏幕上输出的 字符 预先放到DL寄存器里边 ,
31h 表示字符 1
MOV AH , 2 ;把 要调用的系统功能的 第几号功能值放入 AH里边
2.运行截图 有3个负数,接下来分别显示最大和最小数的16位补码
实验报告
7
四、实验小结(包括问题和解决方法、心得体会、意见与建议等)
(一) 实验中遇到的主要问题及解决方法 1.普通的 DB 型只有 8 位,放不下 255 这个数 解决方法:改用 16 位 DW 型
(二)实验心得 第一次尝试用汇编写程序感觉很难,为了实现一个很简单的功能,不仅需要编写一长串代码, 期间还需要注意各种规范,如数据类型问题、运算时的正负号问题等。其中寄存器的数量少,感觉不 够用,很容易被新数据覆盖,所以需要及时把寄存器中的数据存入储存器中。虽然这次实验给人的体 验十分不友好,但是我也从中学到一段合格的程序的确是需要这样精打细磨出来的,通过实验我对数 据在内存中的二进制存放形式有了更深刻的理解。现在我还需要工具书的帮助,但相信熟能生巧,加 以时日我一定可以更流畅地编写一段程序。 (三)意见与建议(没有可省略)

汇编语言课程设计代码转换程序

汇编语言课程设计代码转换程序

汇编语言课程设计报告( 2011 -- 2012 年度第2 学期)代码转换程序专业计算机科学与技术学生姓名赵宝文班级B计算机102学号**********指导教师刘其明张静林完成日期2012年6月22日目录1 设计目的 (1)2 设计内容 (1)3 实现方式 (1)3.1 系统目标 (1)3.2 主体功能 (1)3.3 开发环境 (1)4系统概要设计 (1)4.1 系统的功能模块划分 (1)4.2 系统流程图 (2)5系统详细设计 (4)5.1 程序功能菜单模块设计 (4)小写字母向大写字母转换模块设计 (4)大写字母向小写字母转换模块设计 (5)5.4 二进制数向十六进制数转换模块设计 (5)5.5 十六进制数向二进制数转换模块设计 (5)5.6 十六进制数向十进制数转换模块设计 (6)6 测试 (6)6.1 测试方案 (6)6.2 测试结果 (7)7小结 (7)参考文献 (9)附录 (10)附录1 源程序清单 (10)附录程序功能菜单模块源程序 (10)附录小写字母向大写字母转换模块源程序 (12)附录大写字母向小写字母转换模块源程序 (13)附录二进制数向十六进制数转换模块源程序 (13)附录十六进制数向二进制数转换模块源程序 (14)附录十六进制数向十进制数转换模块源程序 (15)代码转换程序1 设计目的本课程设计是在学完教学大纲规定的全数内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程大体知识,进一步把握汇编语言程序设计方式,提高分析问题、解决问题的综合应用能力。

2 设计内容功能菜单的编制;小写字母向大写字母的转换;大写字母向小写字母的转换;二进制数向十六进制数的转换;十六进制数向二进制数的转换;十六进制数向十进制数的转换。

3 实现方式3.1 系统目标实现代码转换:大小写字母之间转换,二进制、十进制、十六进制之间的彼此转换。

3.2 主体功能Change1模块实现小写字母向大写字母的转换,change2模块实现大写字母向小写字母的转换。

汇编练习实验

汇编练习实验

• 3. 过程定义伪指令PROC/ENDP 过程定义伪指令PROC/ENDP
• 过程定义伪指令PROC/ENDP 格式如下: 格式如下: 过程定义伪指令 <过程名 过程名> 过程名 PROC 属性 … RET <过程名 过程名> 过程名 ENDP
• 4.数据定义伪指令 4.数据定义伪指令
• 数据定义伪指令功能是为操作数分配存储单元, 数据定义伪指令功能是为操作数分配存储单元,并用变 量与存储单元相联系。其一般格式为: 量与存储单元相联系。其一般格式为: [变量]助记符操作数 变量] • 其中助记符可以是: 其中助记符可以是: • DB :一个操作数占用一个字节单元,定义的变量为字节变量; 一个操作数占用一个字节单元,定义的变量为字节变量; • DW :一个操作数占用一个字单元,定义的变量为字变量; 一个操作数占用一个字单元,定义的变量为字变量; • DD :一个操作数占用一个双字单元,定义的变量为双字变量; 一个操作数占用一个双字单元,定义的变量为双字变量; • DF :一个操作数占用一个三字单元,定义的变量为三字变量; 一个操作数占用一个三字单元,定义的变量为三字变量; • DQ :一个操作数占用一个四字单元,定义的变量为四字变量; 一个操作数占用一个四字单元,定义的变量为四字变量; • DT :一个操作数占用十个字节单元,定义的变量为十字节变量。 一个操作数占用十个字节单元,定义的变量为十字节变量。
汇编练习实验
实验系统简介
• 1. 运行 运行Tdpit集成操作软件,进入编程环境。 集成操作软件, 集成操作软件 进入编程环境。 • 2. 语言设置选择“汇编语言”。 语言设置选择“汇编语言” • 3. “文件”菜单“新建”,新建一个文件进行编辑。 文件” 文件 菜单“新建” 新建一个文件进行编辑。 • 4. 程序输入完,检查无误,运行“run all”。 程序输入完,检查无误,运行“ 。

汇编语言代码转换程序实验报告

汇编语言代码转换程序实验报告

课程设计说明书题目: 代码转换程序院系:专业班级:学号:学生姓名:指导教师: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功能实现人机对话掌握代码转换的基本方法。

该程序界面友好,能够通过键盘输入选择相应的转换,结果也能够比较直观的显示在我们眼前,具有一定的人机交互性。

汇编实现大小写字母转换程序

汇编实现大小写字母转换程序

汇编实现⼤⼩写字母转换程序⼀、题⽬要求编写程序,接收键盘输⼊的字符串,将其中⼤写字母转化为⼩写字母,并显⽰转化后的字符串。

键盘输⼊的字符串存于STRBUF缓冲区中,最多输⼊30个字符。

⼆、实现原理字符串是由若⼲个字符构成,⽽字符在计算机中以ASCII码形式存储,因此字符串是⼀个ASCII码序列。

⼩写字符’a’…’z’的ASCII是61H~7AH,⼤写字符A’…’Z’的ASCII是41H~5AH,因此将⼤写字母转化为⼩写字母的⽅法是:⼤写字母ASCII加上20H。

三、实验程序及流程图程序⾸先调⽤0A号功能,等待⽤户输⼊字符串,并存⼊STRBUF中。

然后对输⼊字符逐个检测,若为⼤写字符,则将其转化为⼩写字符,否则不变。

最后采⽤循环结构,使⽤02号调⽤,逐个显⽰字符串中的字符。

流程图如图4.11所⽰。

–1–图4.11 程序流程图程序代码如下。

DATA SEGMENTSTRBUF DB 30,?,31 DUP (?) ;定义键盘接收缓冲区DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:–2–第27章单⽚机实现密码锁MOV AX,DA TAMOV DS,AXLEA DX,STRBUFMOV AH,0AHINT 21H ;0A号调⽤,等待⽤户输⼊字符串MOV CL,STRBUF+1CMP CL,00JZ EXITPMOV CH,00HMOV SI,2XX1:MOV AL,STRBUF[SI] ;读取⼀个字符CMP AL,’A’JB NEXTCMP AL,’Z’JA NEXT ;判断是否是⼤写字符,ASCII在41H~5AH之间ADD STRBUF[SI],’a’-‘A’;⼤写字母ASCII值加20H NEXT:INC SILOOP XX1MOV DL,0AHMOV AH,02HINT 21H ;控制换⾏MOV CH,00MOV CL,STRBUF+1MOV SI,2XX2:MOV DL,STRBUF[SI]MOV AH,02HINT 21HINC SILOOP XX2 ;显⽰字符串EXITP: MOV AH,4CH INT 21H CODE ENDS END START –3–。

《汇编语言程序设计》

《汇编语言程序设计》

解法1
解法2
MOV AX, WORD PTR FIRST XCHG AX, WORD PTR SECOND MOV WORD PTR FIRST, AX
解法3
错误的代码 MOV AL, FIRST
MOV BL, SECOND
XCHG AL, BL MOV AL, FIRST+1 MOV BL, SECOND+1 XCHG AL, BL MOV MOV MOV MOV MOV MOV AH, FIRST FIRST, SECOND SECOND, AH AH, FIRST+1 FIRST+1, SECOND+1 SECOND+1, AH
66H
01H
CAH 01H
AX=6601H
(2)采用堆栈指令编写 PUSH WORD PTR FIRST PUSH WORD PTR SECOND POP WORD PTR FIRST POP WORD PTR SECOND
第1条指令执行后 第2条指令执行后 第3条指令执行后 第4条指令执行后
56H 78H 12H
12H
34H
34H
12H 34H
实验二:用户登录验证程序
时间:周四 地点:1416 类型:设计
• 一、实验目的: 学习掌握汇编语言的开发过程,汇编源程序的编程格式和基本结构, DOS/BIOS功能调用,掌握分支、循环、子程序等基本结构程序的设计方 法。 • 二、实验内容 用汇编语言程序设计方法,设计一个用户登陆验证程序。 • 三、实验要求 1. 程序执行后,给出操作提示,请用户键入用户名和密码。 2. 用户在键入密码时,程序不回显键入字符。 3. 只有当用户键入的用户和密码字符串和程序内定的字符串相同时,显 示欢迎界面,并返回DOS。 • 四、实验报告要求 实验报告的内容:实验名称、实验目的、实验内容、实验程序、实验结 果分析、实验过程遇到的问题及体会。 实验报告以文本形式递交,要求书写规范、文字简练、语句通顺、图表 清晰。

汇编语言代码转换课程设计

汇编语言代码转换课程设计

课程设计(论文)任务书信息工程学院学院计算机科学与技术专业计算机2005-1班一、课程设计(论文)题目代码转换程序二、课程设计(论文)工作自2007 年1 月8 日起至2007 年1 月12 日止。

三、课程设计(论文) 地点: 信息学院机房四、课程设计(论文)内容要求:1.本课程设计的目的(1)使学生增进对汇编语言的认识,加强用汇编语言编程的能力;(2)使学生掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等。

;(3)使学生了解和掌握汇编语言程序设计过程、方法及实现,为以后相关的课程的学习打下良好基础;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。

2.课程设计的任务及要求1)基本要求:代码转换程序:实现大小写字母之间、二进制数和十六进制数之间以及十六进制数和十进制数转换2)创新要求:在基本要求达到后,可进行创新设计,如对一些错误信息的处理。

3)课程设计论文编写要求(1)要按照书稿的规格打印誊写课程设计论文(2)设计论文装订按学校的统一要求完成4)参考文献:(1)、《IBM—PC汇编语言程序设计》(第二版)沈美明温冬婵编著清华大学出版社5)课程设计进度安排内容天数地点构思及收集资料 1 图书馆编写与调试 3 机房撰写论文 1 图书馆、机房学生签名:2007年1 月8 日课程设计(论文)评审意见(1)任务完成情况:优()、良()、中()、一般()、差();(2)工作量饱满:优()、良()、中()、一般()、差();(3)创新能力:优()、良()、中()、一般()、差();(4)论文规范:优()、良()、中()、一般()、差();(5)回答问题:优()、良()、中()、一般()、差();综合评定等级:优()、良()、中()、及格()、不及格()评阅人:职称:2007年1 月12 日目录一、需求分析 (1)二、概要设计 (1)三、详细设计 (3)四、测试结果 (13)五、设计体会 (14)一、需求分析1、实现大小写字母之间的转换:输入的字符串中,不是字母的字符不改变;大写字母改成小写字母时,若是大写字母则不改变;同样,小写字母改成大写字母时,若是小写字母则不改变2、二进制和十六进制数之间的转换:输入一个二进制数(或十六进制数),用十六进制数(或二进制数)表示输出;最多能把十六位二进制数(或四位十六进制数)用四位十六进制数(或十六位二进制数)表示输出;小于十六位(或四位)时按回车结束并输出3、十进制数和十六进制数之间的转换:输入一个十进制数(或十六进制数),用十六进制数(或十进制数)表示输出;最大能把十进制数65535(或十六进制数FFFF)转换成十六进制数FFFF(或十进制数65535)表示输出;小于65535(或FFFF)时按回车结束并输出二、概要设计整个程序由四个主要的子程序和若干个辅助子程序组成,实现六个转换功能:HEXIDEC用来把一个十六进制数转换成十进制数表示BINARY用来把十六制数转换为十六位二进制数表示DETOHE用来把一个十进制数转换成十六进制表示BETOHE用来把一个十六位二进制数转换成十六进制输出1、INPUT用来输入字符串2、HEXIBIN用来输入一个十六进制数,并存放在BX中3、BINIDEC用来把BX中十六进制转换到十进制4、DEC_DIV用来除以各位十进制的权5、PRINT用来把BX中的十六进制数转换成二进制6、DECIBIN输入一个五位的十进制数7、BINIHEX把BX中的十进制数转换成十六进制输出8、INBIN输入十六二进制数9、CRLF用来换行三、详细设计GAIXIE MACRO P1,P2,P3,P4,P5,P6 ;义该宏用来判定字母?P2:CMP BYTE PTR [SI],P3JB P5CMP BYTE PTR [SI],P4JNB P5CMP BYTE PTR [SI],'$' ;到$则结束JZ P6P1 BYTE PTR [SI],20HP5:INC SILOOP P2P6:LEA DX,BUF1+2 ;出改写后的字母MOV AH,9 ;调用9号中断功能,输出字符串INT 21HLEA DX,BF ;把BF首地址给CXMOV AH,9 ;调用9号中断功能INT 21HJMP START ;返回ENDMDA TA SEGMENT ;义数据段BUF DB '**********choose the operation**********',0DH,0AH DB '1:big to small',0DH,0AHDB '2:small to big',0DH,0AHDB '3:hexadecimal to binary',0DH,0AHDB '4:binary to hexadecimal',0DH,0AHDB '5:hexadecimal to decimal',0DH,0AHDB '6:decimal to hexadecimal',0DH,0AHDB '7:EXIT',0DH,0AH,'$'BF DB 0DH,0AH,'$'BUF1 DB 21,?,20 DUP(?) ;用来存放输入的字符串BUF2 DB 'enter a hex data:$'BUF3 DB 'The input is wrong,choose again please:$'BUF4 DB 'enter a deci data:$'BUF5 DB 'enter a bin data:$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET BUF ;出选择界面MOV AH,9 ;调用9号中断功能INT 21HMOV AH,1 ;入要选择的操作INT 21HPUSH AX ;NT 会改变AL的值,应压栈保护LEA DX,BF ;行MOV AH,9 ;调用9号中断功能INT 21HPOP AX ;把AX压栈保护CMP AL,'1' ;把AL中内容跟1比较JZ BTOS ;相等则跳转到CMP AL,'2'JZ STOBCMP AL,'3'JZ HTOBCMP AL,'4'JZ BTOHCMP AL,'5'JZ HTODCMP AL,'6'JZ DTOHCMP AL,'7'JZ EXITLEA DX,BUF3 ;把BUF3的首地址给DXMOV AH,9INT 21HCALL CRLF ;调用子程序CALLJMP START ;返回,重新选择EXIT:MOV AH,4CH ;退出INT 21HBTOH:CALL BETOHE ;调用二进制转十六进制子程序HTOB:CALL BINARY ;调用十六进制转二进制子程序HTOD:CALL HEXIDEC ;调用十六进制转十进制子程序DTOH:CALL DETOHE ;调用十进制转十六进制子程序BTOS:CALL INPUT ;大写字母改为小写MOV CX,20 ;作为循环条件GAIXIE ADD,NEXT1,'A','Z',N1,N2 ;宏GAIXIE展开STOB:CALL INPUT ;小写字母改为大写MOV CX,20GAIXIE SUB,NEXT2,'a','z',N3,N4INPUT PROC NEAR ;输入字符串MOV DX,0 ;DX清零MOV DX,OFFSET BUF1 ;把BUF1的首地址给DXMOV AH,10 ;调用10号中断功能,输出字符串INT 21HLEA DX,BF ;把BF首地址给DXMOV AH,9INT 21HLEA SI,BUF1+2MOV BL,[SI-1] ;把输入的字符个数给BLMOV BH,0 ;BH清零MOV BYTE PTR [BX+SI+1],'$' ;把$作为字符串结束字符LEA DX,BUF1+2MOV AH,9INT 21HRET ;返回INPUT ENDPHEXIDEC PROC NEAR ;用该子程序把一个十六进制数转换成十进制数表示PUSH DS ;保护初始数据段SUB AX,AX ;AX清零PUSH AX ;把AX压栈保护START1:LEA DX,BUF2MOV AH,9INT 21HCALL HEXIBIN ;调用输入一个十六进制数子程序CMP AL,1BH ;遇Esc则退出JZ EXIT1CALL CRLF ;换行CALL BINIDECCALL CRLFJMP START1 ;返回EXIT1:RETHEXIDEC ENDPHEXIBIN PROC NEAR ;输入一个十六进制数,并存放在BX中MOV BX,0 ;把BX清零MOV DX,0 ;作为输入四位的记数器INHEX:CMP DX,4 ;把DX跟4比较JNB HEXEND ;大于则跳转MOV AH,1 ;输入数据INT 21HCMP AL,1BH ;遇到Esc则退出JZ HEXENDSUB AL,30H ;判断是否数字或字母?否则跳出JL HEXENDCMP AL,10 ;判断是否数字JL ADD_TO ;是则存放BX中SUB AL,7 ;把AL内容减7转为字母CMP AL,10 ;判断是否小写字母(a~f)JL HEXENDCMP AL,16JL ADD_TO ;小于则跳转SUB AL,20H ;判断是否大写字母(A~F)CMP AL,10JL HEXENDCMP AL,16JGE HEXENDADD_TO:MOV CL,4 ;作为循环条件SHL BX,CL ;BX乘以16MOV AH,0ADD BX,AX ;两数相加INC DX ;DX加1JMP INHEXHEXEND:RETHEXIBIN ENDPBINIDEC PROC NEAR ;用来把BX中十六进制转换到十进制MOV CX,10000 ;把10000给CX,作为万位的权CALL DEC_DIV ;调用除权子程序MOV CX,1000CALL DEC_DIVMOV CX,100CALL DEC_DIVMOV CX,10CALL DEC_DIVCALL DEC_DIVRETBINIDEC ENDPDEC_DIV PROC NEAR ;除以各位十进制的权MOV AX,BX ;把BX内容给AXMOV DX,0 ;DX清零DIV CXMOV BX,DXMOV DL,ALADD DL,30H ;转换为ASSIIMOV AH,2INT 21HRETDEC_DIV ENDPCRLF PROC NEAR ;换行LEA DX,BFMOV AH,9INT 21HRETCRLF ENDPBINARY PROC NEAR ;该子程序用来把十六制数转换为十六位二进制数表示START2:LEA DX,BUF2MOV AH,9INT 21HPUSH DS ;把DS压栈SUB AX,AX ;AX清零PUSH AXCALL HEXIBINCMP AL,1BHJZ EXIT2CALL PRINTCALL CRLFJMP START2EXIT2:RETBINARY ENDPPRINT PROC NEAR ;把BX中的十六进制数转换成二进制MOV CX,16D ;记数ROT:SHL BX,1D ;每移一位最高位变为CFJC SET ;CF为1则跳到SET,否则输出0MOV DL,30HMOV AH,2INT 21HDEC CXJNZ ROTRETSET:MOV DL,31H ;输出1MOV AH,2INT 21HDEC CXJNZ ROTRETPRINT ENDPDETOHE PROC NEAR ;用该子程序来把一个十进制数转换成十六进制表示REPEAT:LEA DX,BUF4MOV AH,9INT 21HPUSH DSSUB AX,AXPUSH AXCALL DECIBINCMP AL,1BHJZ EXIT3CALL CRLFCALL BINIHEXCALL CRLFJMP REPEATEXIT3:RETDETOHE ENDPDECIBIN PROC NEAR ;输入一个五位的十进制数MOV BX,0MOV CX,0NEWCHAR:CMP CX,5JNB EXIT4MOV AH,1INT 21HCMP AL,1BHJZ EXIT4SUB AL,30HJL EXIT4CMP AL,9JG EXIT4CBWINC CXXCHG AX,BXMOV DX,10MUL DXXCHG AX,BXADD BX,AXJMP NEWCHAREXIT4:RETDECIBIN ENDPBINIHEX PROC NEAR ;把BX中的十进制数转换成十六进制输出MOV CH,4ROTATE:MOV CL,4ROL BX,CL ;把BX中高四位移到低四位,放到AL中MOV AL,BLAND AL,0FHADD AL,30HCMP AL,3AH ;判断是否为数字JL PRINTITADD AL,7PRINTIT:MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTA TERETBINIHEX ENDPBETOHE PROC NEAR ;用该子程序来把一个十六位二进制数转换成十六进制输出START3:LEA DX,BUF5MOV AH,9INT 21HPUSH DSSUB AX,AXPUSH AXCALL INBINCMP AL,1BHJZ EXIT5CALL CRLFCALL BINIHEXCALL CRLFJMP START3EXIT5:RETBETOHE ENDPINBIN PROC NEAR ;输入十六二进制数MOV BX,0MOV CX,0PUTIN:CMP CX,16JNB EXIT6MOV AH,1INT 21HCMP AL,1BHJZ EXIT6SUB AL,30HJL EXIT6CMP AL,1JG EXIT6CBWINC CXXCHG AX,BXMOV DX,2MUL DXXCHG AX,BXADD BX,AXJMP PUTINEXIT6:RETINBIN ENDPCODE ENDSEND START四、测试结果经过多次调试、修改,测试结果胜利通过,符合要求:选择大写改小写功能:输入字符串,字母全变成小写,其他字符不变,遇回车结束输入并执行选择小写改大写功能:输入字符串,字母全变成大写,其他字符不变,遇回车结束输入并执行选择十六进制转换成二进制功能:输入一个不大于四位的十六进制数,输出对应的二进制数,遇回车结束输入并执行选择二进制转换成十六进制功能:输入一个不大于十六位的二进制数,输出对应的十六进制数,遇回车结束输入并执行选择十六进制转换成十进制功能:输入一个不大于四位的十六进制数,输出对应的十进制数,遇回车结束输入并执行选择十进制转换成十六进制功能:输入一个不大于65535的十进制数,输出对应的十六进制数,遇回车结束输入并执行五、设计体会通过这次的课程设计,让我对汇编有了更进一步的认识,加强了我用汇编语言编程的能力。

2020年汇编实验报告代码(例文)

2020年汇编实验报告代码(例文)

汇编语言程序设计实验报告实验名称上机过程及顺序结构与分支结构程序设计实验班级学号姓名日期成绩评阅人软件学院一、实验目的与意义 1、掌握汇编语言程序设计的基本方法和技能; 2、熟练掌握使用全屏幕编辑程序 EDIT 编辑汇编语言源程序; 3、熟练掌握宏汇编程序 MASM 的使用; 4、熟练掌握连接程序 LINK 的使用。

5、掌握分支程序的结构6、掌握分支程序的设计、调试方法二、实验环境上机号24# 操作系统windows xp professional sp2软件环境Editplus +MASM+LINK+DEBUG三、实验的预习内容汇编程序上机的主要分为编辑,汇编,连接,执行等几个步骤汇编语言的工作环境为了运行汇编语言程序磁盘上应该有下列文件MASM.EXE LINK.EXE CREF.EXE 或 DEBUG.EXE1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以 ASCII 码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立 3 个文件扩展名为 .OBJ 的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。

目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。

列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。

交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。

.LST 和.CRF 两个文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。

在对源程序文件(ASM 文件)汇编时,汇编程序将对 ASM 文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即 OBJ 文件。

汇编语言中的字符串、代码转换

汇编语言中的字符串、代码转换
一般地讲,字符串指一串字符,或者说,是字符的有限序列。如 :6AN7BH,用ASCII码表示,并存储在连续的存储单元中,每个 字符占一个字或一个字节。用比较专业的术语来说,字符串是一种 特殊的线性表,它的数据元素仅由一个字符组成。
一个字符串中包含的字符个数,称为这个字符串的长度。长度为 零的字符串称为空串,它不包含任何字符。字符串通常用单引号或 双引号括起来,例如:
Hale Waihona Puke 3.LODS取串指令格式:可有三种 LODS SRC;源串元素由DS:SI指定的存储单元,目的串元素隐 含在由DS:AL或DS:AX指定的存储单元 LODSB; 8位字符串操作,省略源串和目的串不写 LODSW; 16位字符串操作,省略源串和目的串不写 功能:该指令把由SI指定的数据段中某单元[SI]的内容送到AL或 AX中,并根据方向标志及数据类型修改SI的内容。 说明: 1)如果是字节操作则先将由SI指定的单元内容送入AL中,然后 SI再自加/减1;如果是字操作则将[SI]送入AX,然后SI再自加/减 2。 2)该指令不影响标志位。
(1) ” X1 ” (2) ’ABC’
返回本节
字符串所能包含的字符,依赖于具体机器的字符集。目前世 界上应用最广的字符集是ASCII码字符集。 存储字符串的方法也就是存储列表的一般方法。最简单最普遍的 方法是顺序存储,还有链接存储等,这里仅讨论顺序存储的字符 串。 字符串的表示在8086/8088宏汇编语言中,可以借助数据定义语 句DB(因一个ASCII码是7位)来定义,字符串的特征表示一般有 两种,一种是在字符串的尾部用00H作标记,另一种是在字符串的 前面空出一个单元,放置字符串的长度。例: STRI DB ’ I am a student’,0 STR2 DB 4,’ABCD’

汇编语言字母大小写转换

汇编语言字母大小写转换

实验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等工具的使用,由于初次编写汇编程序,在实验过程中遇到了很多问题,但通过查看课本和请教老师,最终完成了实验,达到了实验的目的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
( 2014/ 2015 学年第二学期)
课程名称微型计算机原理与接口技术
实验名称汇编语言语法练习与代码转换
实验时间2015 年 4 月 16 日指导单位计算机学院、软件学院
指导教师韩崇
学生姓名班级学号
学院(系) 专业
实验报告
三、实验过程描述与结果分析
汇编语言源程序编写好以后,必须经过下列几个步骤才能在机器上运行:
(1) 编辑源程序(生成.ASM文件)
(2) 汇编源程序(.ASM →.OBJ)
(3) 链接目标程序(.OBJ →.EXE )
(4) 调试可执行程序(使用调试程序Debug调试生成的.EXE文件)
(5) 运行程序输出结果。

MOV [BX],AH
CALL CHANG
MOV AH,9
MOV DX,OFFSET MEST ;MOV DX,OFFSET MESG
INT 21H
MOV AH,4CH
INT 21H
CHANG:PROC
LAST: CMP [BX],10 ;LAST:CMP BYTE PTR [BX],10
JC NEXT
SUB [Bx],10 ;sub byte ptr [bx],10
INC [BX+7] ;INC BYTE PTR [BX+7]
JMP LAST
NEXT: ADD [BX+8],SUM ;NEXT:MOV CL,SUM
ADD BYTE PTR [BX+8],CL ADD [BX+7],30H ;ADD BYTE PTR [BX+7],30H
ADD [BX+8],30H ;ADD BYTE PTR [BX+8],30H
RET
CHANG:ENDP
CODE ENDS
END BEG。

相关文档
最新文档