资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
汇编语言程序设计(2) 无 88 981239 石光一 实验目的1 掌握子程序的编程方法2 掌握宏指令与宏指令调用的编程方法3 掌握C语言与汇编语言的混合编程方法二 实验内容1 编写一个程序,将用户从键盘输入的十进制数(不超过65535)转换成十六进制数并显示。* 程序清单 *D SEGMENT OUTPUT DBENTER A DECIMAL NUMBER(65535):,0DH,0AH,$NUM DB 8 DB ? DB 8 DUP(?)EEQQ DW 0ASCII DB 0123456789ABCDEFEO DB 0DH,0AH,INPUT ERROR!,0DH,0AH,$RE1 DB 0RE2 DB 0RE3 DB 0RE4 DB 0RESULT1 DB 0DH,0AH,THE CONVERTED HEHADECIMAL NUMBER IS:$RESULT2 DB HD ENDS;定义数据段CEG SEGMENTASSUME CS:CEG,DS:D;定义代码段START : MOV AX,DMOV DS,AX;给数据段赋初值LEADX,OUTPUTMOV AH,9INT 21HLEA DX,NUM ;显示输入提示字符串MOV AH,0AHINT 21H;读取字符串CALL CHECK;调用第一个子程序,检查字符串是否正确CALL DTOH ;调用第二个子程序,将十进制数ASCII串转换成十六进制数CALL HTOA;调用第三个子程序,将十六进制数转换成ASCII串LEA DX,RESULT1MOV AH,9INT 21H ;显示输出提示字符串LEA SI,RE4MOV DL,SIMOV AH,2INT 21HLEA SI,RE3MOV DL,SIMOV AH,2INT 21HLEA SI,RE2MOV DL,SIMOV AH,2INT 21HLEA SI,RE1MOV DL,SIMOV AH,2INT 21HLEA SI,RESULT2;分别输出四位MOV DL,SIMOV AH,2INT 21HLAST: MOV AH,4CH;返回DOS状态INT 21HCHECK PROC ;定义子程序LEA DI,NUM;DI保存数据地址INC DI;DI指向下一位MOV CL,DI;CL保存数据位数AND CX,000FHINC DI;DI指向下一位AG:MOV AL,DICMP AL,9 JA EERRCMP AL,0JB EERRINC DILOOP AGJMP RE;若输入的字符串中含有非09的字符,显示出错信息EERR: LEA DX,EOMOV AH,9INT 21H JMP LASTRE:RETCHECK ENDP DTOH PROC ;定义子程序LEA DI,NUM;DI保存数据地址INC DI;DI指向下一位MOVCL,DI ;CL保存数据位数AND CX,000FHMOV AX,0MOV BX,0;清空AX,BXMOV SI,10;SI赋十AD:MUL SIINC DIMOV BL,DIAND BL,0FHADC AX,BXLOOP ADMOV EEQQ,AX;循环累加RETDTOH ENDPHTOA PROC ;定义子程序MOV AX,EEQQ;读取数据AND AL,0FHLEA BX,ASCIIXLAT ASCIIMOV RE1,AL;将十六进制数转换成ASCII码并保存MOV DL,ALMOV AX,EEQQMOV AH,0AND AL,0F0HMOV CL,4SHR AL,CLLEA BX,ASCIIXLAT ASCIIMOV RE2,AL;将十六进制数转换成ASCII码并保存MOV DL,ALMOV AX,EEQQAND AH,0FHMOV AL,AHLEA BX,ASCIIXLAT ASCIIMOV RE3,AL;将十六进制数转换成ASCII码并保存MOV DL,ALMOV AX,EEQQMOV AH,0AND AL,0F0HMOV CL,4SHR AL,CLMOV AL,AHLEA BX,ASCIIXLAT ASCIIMOV RE4,AL;将十六进制数转换成ASCII码并保存RETHTOA ENDPCEG ENDS END START2 编写一个程序,对键盘输入的两个字符串进行比较,输入的字符串长度不超过80。* 程序清单 *D SEGMENT ;定义代码段STRING1 DB Enter the first string(NUMBER80):,0DH,0AH,$STRING2DB 0DH,0AH,Enter the second string (NUMBER80):,0DH,0AH,$RESULT1DB 0DH,0AH,The two string are identical,0DH,0AH,$RESULT2DB 0DH,0AH,The two string are not identical,0DH,0AH,$IN1DB 100;开辟第一个字符串缓冲区DB ?DB 100 DUP (?)IN2DB 100;开辟第二个字符串缓冲区DB ?DB 100 DUP (?)D ENDSOUTPUT MACRO DAT;定义显示字符串的宏 MOV DX,OFFSET DAT MOV AH,9 INT 21HENDM CSEG SEGMENT;初始化数据段 ASSUME CS:CSEG,DS:D START:MOV AX,D MOV DS,AX OUTPUT STRING1;显示输入提示字符串 LEA DX,IN1 MOV AH,0AH INT 21H;存第一个字符串 OUTPUT STRING2 LEA DX,IN2 MOV AH,0AH INT 21H;存第二个字符串 LEA SI,IN1 LEA DI,IN2 INC SI INC DI MOV AH,SI MOV AL,DI CMP AH,AL;比较两串长度 JNE NOTSAME MOV CL,AL;两串同长时,记录实际串长 INC SI INC DIAG: MOV AL,SI MOV AH,DI CMP AH,AL JNE NOTSAME INC SI INC DI LOOP AG;从前向后逐位比较,不同则跳出循环 OUTPUT RESULT1;正常结束循环,两串相同 JMP EXTOUTNOTSAME: OUTPUT RESULT2EXTOUT: MOV AH, 4CH INT 21HCSEG ENDSEND START 3 编写两个汇编语言子程序,分别返回系统的当前日期和时间;编写一个C语言程序,调用汇编语言子程序, 显示系统的当前日期和时间*程序清单 *.model small.codepublic _time_time procmov ah,2chint 21hmov ax,cxret;返回系统时间_timeendp ;dh秒,dl百分秒。ah小时,al分end.model small.codepublic _date_date procmov ah,2ahint 21hmov ax,cxret;返回系统日期_dateendpend;dh月,dl日。ax年C语言源程序 #include stdio.hextern long date();extern long time();/*定义为全局函数变量,并且是长整型的,正好是能装下dx,ax中的32位机器数*/main()long date1,date2; long time1,time2; int year,month,day; int hour,min,se
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号