西安电子科技大学实验报告实验一汇编语言编程实验1 实验目的(1)掌握汇编语言的编程方法(2)掌握DOS功能调用的使用方法(3)掌握汇编语言程序的调试运行过程2 实验内容(1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。
(2) 在屏幕上显示自己的学号姓名信息。
(3)循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。
(4)自主设计输入显示信息,完成编程与调试,演示实验结果。
3 实验结果任务一4 程序流程图5 程序代码任务一DATA SEGMENTNUMBER DB ' 03101214 SONG YUAN YUAN',0AH,0DH,'$'string1 DB 0AH,0DH,' input q/Q to exit ',0AH,0DH,0AH,0DH,'NUMBER AND NAME:','$' string2 DB 0AH,0DH,'Input: $'RESULT DB 0AH,0DH,'ASCII is :$'SD DB ''DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET string1MOV AH,09HINT 21HMOV DX,OFFSET NUMBERINT 21HC1: MOV DX,OFFSET string2MOV AH,09HINT 21HMOV AH,01HINT 21HCMP AL,'Q'JZ EXITCMP AL,'q'JZ EXITMOV SD,ALMOV DX ,OFFSET RESULTMOV AH,09HINT 21HMOV SI,OFFSET SDMOV AL,DS:[SI]AND AL,0F0HMOV CL,4SHR AL,CLCMP AL,0AHJB C2ADD AL,07HC2: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,ALMOV AH,02HINT 21Hloop C1EXIT: MOV AX,4C00HINT 21HCODE ENDSEND START实验二数码转换实验.1 实验目的(1)掌握不同进制数及编码相互转换的程序设计方法。
(2)掌握运算类指令编程及调试方法。
(3)掌握循环程序的设计方法。
2. 实验内容及说明(1)重复从键盘输入不超过5位的十进制数,按回车键结束输入;(2)将该十进制数转换成二进制数;结果以16进制数的形式显示在屏幕上;(3)如果输入非数字字符,则报告出错信息,重新输入;(4)直到输入“Q”或‘q’时程序运行结束。
键盘输入一字符串,以空格结束,统计其中数字字符的个数,并在屏幕显示。
任务二流程图任务二; PAGE 60,132;本实验将输入的ASCII码转换为二进制,要求输入位数小于5 DDATA SEGMENTMES DB 0AH,0DH,'The ascii code of decimal code are: $' MSG1 DB 0AH,0DH,'exit,input: q/Q ',0AH,0DH,0AH,0DH,'$'MSG2 DB 0AH,0DH,0AH,0DH,'Input: $'MSG3 DB 0AH,0DH,'input error',0AH,0DH,'$'BUF DB 30H,30H,30H,31H,35HDB 10H DUP(0)N DW 0DDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDATASTART: MOV AX,DDATAMOV DS,AXMOV ES,AXMOV DI,OFFSET BUFCLCMOV DX,OFFSET MSG1MOV AH,09HINT 21HA1: MOV AH,1 ;接收键盘输入INT 21HINC NSTOSB ;将输入数据存放在BUF缓冲区中CMP AL,'Q'JZ EXITCMP AL,'q'JZ EXITCMP AL,39HJA ERRORCMP AL,13JNE A1MOV CX,NDEC CXMOV BX,000AHMOV SI,OFFSET BUFMOV AH,0MOV DX,0LODSBCMP CX,1JE A3SUB AL,30H ;将BUF中数据转换为二——十进制数DEC CXA2: IMUL BXMOV DX,AXLODSBMOV AH,0A3: SUB AL,30HADD AX,DXLOOP A2MOV [SI],AXMOV DX,OFFSET MESMOV AH,09HINT 21HINC SI ;显示高字节CALL SHOWDEC SI ;显示低字节CALL SHOWMOV DX,OFFSET MSG2MOV AH,09HINT 21HMOV AX ,0stosbMOV AX ,0MOV CX ,0MOV BX ,0MOV DX,0MOV DI,OFFSET BUFCLCMOV N,0LOOP A1EXIT: MOV AX,4C00HINT 21HERROR: MOV DX,OFFSET MSG3MOV AH,09HINT 21HMOV DX,OFFSET MSG2MOV AH,09HINT 21HJMP A1SHOW PROC NEARMOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HRETSHOW ENDPCODE ENDSEND START实验三基本IO口扩展实验.1 实验目的了解TTL芯片扩展简单I/O口的方法,掌握数据输入输出程序编制的方法。
2实验内容74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平时,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态。
其引脚图如下:74LS273是一种带清除功能的8D触发器, 1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
其引脚图如下:本实验要求用74LS244作为输入口,读取开关状态,并将此状态通过74LS273连接到发光二极管显示。
具体实验内容如下:(1)当开关Yi为低电平时对应的发光二极管点亮,Yi为高电平时对应的发光二极管灭。
(2)当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。
(3)当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
(4)自主设计控制及显示模式,完成编程调试,演示实验结果。
3 实验原理图图3-2-1 74LS244与74LS273扩展I/O口原理图实验连线图:图3-2-2 扩展I/O口连线图4 代码MY_STACK SEGMENT PARA 'STACK'DB 100 DUP(?)MY_STACK ENDSMY_DATA SEGMENT PARA 'DATA'IO_9054base_address DB 4 DUP(0) ;PCI卡9054芯片I/O基地址暂存空间IO_base_address DB 4 DUP(0) ;PCI卡I/O基地址暂存空间pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$'GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'LS244 DW 00000HLS273 DW 00020HRA DB ?LB DB ?DELAY_SET EQU 0FFFH ;延时常数MY_DATA ENDsMY_CODE SEGMENT PARA 'CODE'MY_PROC PROC FARASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACKMAIN:.386 ;386模式编译MOV AX,MY_DATAMOV DS,AXMOV ES,AXMOV AX,MY_STACKMOV SS,AXCALL FINDPCI ;自动查找PCI卡资源及IO口基址MOV CX,word ptr IO_base_addressADD LS244,CX ;PCI卡IO基址+偏移ADD LS273,CX;自己的程序MOV RA,7FHMOV LB,0FEHREAD1: MOV DX,LS244 ;读取开关状态IN AL,DXCMP AL,0FFHJZ A1CMP AL,00HJZ A2NOT AL ;取反MOV DX,LS273OUT DX,AL ;送LED显示CALL DELAYCALL BREAKJMP READ1A1: MOV AL,0FEHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0FDHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0FBHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0F7HMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0EFHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0DFHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0BFHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,07FHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKJMP READ1A2: MOV AL,7FHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0BFHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0DFHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0EFHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0F7HMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0FBHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0FDHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKMOV AL,0FEHMOV DX,LS273OUT DX,ALCALL DELAYCALL BREAKJMP READ1MY_PROC ENDpBREAK PROC NEAR ;按任意键退出PUSHFPUSH AXPUSH DXMOV AH,06HMOV DL,0FFHINT 21HJE RETURNMOV AX,4C00HINT 21HRETURN: POP DXPOP AXPOPFRETBREAK ENDPDELAY PROC NEAR ;延时程序PUSHFPUSH DXPUSH CXMOV DX,DELAY_SETD1: MOV CX,-1D2: DEC CXJNZ D2DEC DXJNZ D1POP CXPOP DXPOPFRETDELAY ENDp;FUNCTION CODEIO_port_addre EQU 0CF8H ;32位配置地址端口IO_port_data EQU 0CFCH ;32位配置数据端口IO_PLX_ID EQU 200810B5H ;PCI卡设备及厂商ID BADR0 = 10H ;基地址寄存器0 BADR1 = 14H ;基地址寄存器1 BADR2 = 18H ;基地址寄存器2 BADR3 = 1CH ;基地址寄存器3 FINDPCI PROC NEAR ;查找PCI卡资源并显示PUSHADPUSHFDMOV EBX,080000000HFINDPCI_next:ADD EBX,100HCMP EBX,081000000HJNZ findpci_continueMOV DX,offset pcicardnotfind ;显示未找到PCI卡提示信息MOV AH,09HINT 21HMOV AH,4CHINT 21H ;退出findpci_continue:MOV DX,IO_port_addreMOV EAX,EBXOUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口CMP EAX,IO_PLX_IDJNZ findpci_next ;检查是否发现PCI卡MOV DX,IO_port_addreMOV EAX,EBXADD EAX,BADR1OUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口MOV dword ptr IO_9054base_address,EAXAND EAX,1JZ findPCI_nex ;检查是否为i/o基址信息MOV EAX,dword ptr IO_9054base_addressAND EAX,0fffffffehMOV dword ptr IO_9054base_address,EAX ;去除i/o指示位并保存MOV DX,IO_port_addreMOV EAX,EBXADD EAX,BADR2OUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口MOV dword ptr IO_base_address,EAXAND EAX,1JZ findPCI_next ;检查是否为i/o基址信息MOV EAX,dword ptr IO_base_addressAND EAX,0fffffffehMOV dword ptr IO_base_address,EAX ;去除i/o指示位并保存MOV DX,offset good ;显示开始执行程序信息MOV AH,09HINT 21HPOPfdPOPadRETfindPCI ENDPMY_CODE ENDSEND MAIN5 实验结果:发光二极管Qi从右至左轮流点亮实验四可编程并行接口8255实验.1 实验目的了解可编程并行接口芯片8255的内部结构、工作方式、初始化编程及应用。