微机原理实验代码
民航大学微机原理实验报告及试验程序

微机原理与接口技术实验报告实验环境: Windows XP SP3实验软件:masm, link, debug, edit。
Test 1: debug命令及汇编指令和寻址的应用。
NO.1设堆栈指针SP=2000H, AX=3000H, BX=5000H;请编一程序段将AX和BX的内容进行交换。
要求:用3种方法实现。
方法一CODE SEGMENT ASSUME CS:CODE START: MOV AX,3000HMOV BX,5000H MOV CX,AX MOV AX,BX MOV BX,CX CODE ENDS END START 方法二CODE SEGMENTASSUME CS:CODESTART: MOVAX,3000HMOV BX,5000HXCHG AX,BXCODE ENDSEND START方法三CODE SEGMENTASSUME CS:CODESTART: MOVAX,3000HMOV BX,5000HPUSH AXPUSH BXPOP AXPOP BXCODE ENDSEND STARTNO.2分别执行以下指令, 比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。
MOV AX,BX 寄存器寻址, 将BX内容送AXMOV AX,[BX] 寄存器间接寻址, 将DS:BX内存单元内容送AXMOV AX,10[BX] 寄存器相对寻址, 将DS:BX+10内存单元内容送AXNO.3已知有如下程序段:MOV AX, 1234HMOV CL, 4在以上程序段的基础上, 分别执行以下指令:ROL AX, CL AX=4123HROR AX, CL AX=3412HSHL AX, CL AX=4120HSHR AX, CL AX=0412HSAR AX, CL AX=0041HRCL AX, CL AX=0410HRCR AX, CL AX=0041HNO.4设有以下部分程序段:TABLE DW 10H,20H,30H,40H,50HENTRY DW 3┇LEA BX,TABLEADD BX,ENTRYMOV AX,[BX]┇要求: (1)将以上程序段补充成为一个完整的汇编程序。
微机原理实验

1.输入课本相关程序并加以注释;DATAS SEGMENTVARX DW 20HVARY DW 13HVARZ DW ?;此处输入数据段代码DATAS ENDSSTACKS SEGMENTDW 20H DUP(?);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AX,VARXMOV CL,3SHL AX,CLADD AX,VARYSUB AX,7MOV CL,2SAR AX,CLMOV VARZ,AX;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START2.编写一程序,在屏幕上当前光标处显示字符串“Hello world!”。
DATAS SEGMENTSTRING DB 'HELLO WORLD!$';此处输入数据段代码DATAS ENDSSTACKS SEGMENTDB 20H DUP(?);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXLEA DX,STRINGMOV AH,09HINT 21H;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START1.编制程序实现Z=(16X+Y-9)/4 ,并在屏幕上显示计算结果。
DATAS SEGMENTVARX DW 20HVARY DW 13HVARZ DW ?;此处输入数据段代码DATAS ENDSSTACKS SEGMENTDW 20H DUP(?);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AX,VARXMOV CL,4SHL AX,CLADD AX,VARYSUB AX,9MOV CL,2SAR AX,CLMOV VARZ,AX;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START2.从键盘输入一个小写字符,将其转换为大写在屏幕显示。
微机原理代码

again: mov si,offset leddt
call process
inc cx
call jishu
jmp Start
mov ax,4c00h
int 21h
Process proc
Push ax
Push dx
mov dx,0f003h ;8255初始化编程
mov al,10000010b
out dx,al
mov dx,0f000h ;初始状态指示灯灭
push ax
push cx
mov si,offset ledbh
mov di,offset leddt
mov cx,8
again2:mov al,[si]
mov [di],al
or al,10111111b
cmp al,11111111b
Jz pg3
Mov dx,0f000h ;启动车床主轴
Mov al,11111011b
Out dx,al
Pg4: Mov dx,0f001h ;车削结束
End start
Mov dx,0f000h ;液压定位装置启动
Mov al,11111110b
Out dx,al
Pg2: Mov dx,0f001h ;光电传感器中心定位是否准确
In al,dx
or al,11011111b
.model small
extrn display8:near
.Stack
.Data
Leddt db 8 dup(00h) ; 要显示数字缓冲区
西安交通大学微机原理上机实验一代码

1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:(1)如果数组是无符号数,求出最大值,并显示;(2)如果数组是有符号数,求出最大值,并显示。
(1)#make_COM#ORG 100HJMP STARTD1 DB 93H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H ;建立一个9字节的数组START:MOV AL,80H ;给AL附初值MOV SI,0 ;给SI附初值MOV CX,9 ;比较次数AGAIN:CMP AL,D1[SI] ;比较过程JNA EXC ;低于/等于则跳转INC SILOOP AGAINJMP EXITEXC: MOV AL,D1[SI] ;覆盖原内容INC SILOOP AGAINJMP EXITEXIT: MOV BL,AL ;显示结果高4位AND AL,0F0HSHR AL,4CMP AL,0AHJB XADD AL,7HX: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,BL ;显示结果低4位AND AL,0FHCMP AL,0AHJB XXADD AL,7HXX: ADD AL,30HMOV DL,ALINT 21HMOV AL,'H'MOV DL,ALMOV AH,02HINT 21HRETEND START(2)#make_COM#ORG 100HJMP STARTD1 DB 93H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H ;建立一个9字节的数组START:MOV AL,80H ;给AL附初值MOV SI,0 ;给SI附初值MOV CX,9 ;比较次数AGAIN:CMP AL,D1[SI] ;比较过程JNG EXC ;低于/等于则跳转INC SILOOP AGAINJMP EXITEXC: MOV AL,D1[SI] ;覆盖原内容INC SILOOP AGAINJMP EXITEXIT: MOV BL,AL ;显示结果高4位AND AL,0F0HSHR AL,4CMP AL,0AHJB XADD AL,7HX: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,BL ;显示结果低4位AND AL,0FHJB XXADD AL,7HXX: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,'H'MOV DL,ALMOV AH,02HINT 21HRETEND START2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”#make_COM#ORG 100HJMP STARTSTRING DB 'THE BCD OF 500H IS:$' ;提示语ARRAY DB 4 DUP(?) ;BCD码缓存区START: LEA DX,STRING ;显示提示语MOV AH,9INT 21HMOV AX,500HMOV BX,0 ;BX指向ARRAY申请的空间MOV DL,0AGAIN1: S UB AX,03E8H ;(AX)-1000JC NEXT1 ;不够减,即CF=1转INC DL ;(DL)+1JMP AGAIN1NEXT1: ADD AX,03E8H ;(AX)←(AX)+1000MOV ARRAY[BX],DL ;存DL;INC BX ;BX 加1MOV DL,0 ;令(DL)=0AGAIN2: S UB AX,0064H ;(AX)-100JC NEXT2INC DLJMP AGAIN2NEXT2: ADD AX,0064HMOV ARRAY[BX],DLINC BXMOV DL,0AGAIN3: S UB AX,000AH ;(AX)-10JC NEXT3INC DLJMP AGAIN3NEXT3: ADD AX,000AHMOV ARRAY[BX],DLINC BXMOV ARRAY[BX],ALMOV DX,0 ;循环显示结果MOV CX,4MOV SI,0OUTPUT: MOV DL,ARRAY[SI]ADD DL,30HMOV AH,2INT 21HINC SILOOP OUTPUTMOV AH, 4CH ;返回DOS系统INT 21HEND START3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII 是:”#make_COM#ORG 100HJMP STARTD1 DB 'THE ASCII OF BCD 7693 IS:$'D2 DB 07H,06H,09H,03HSTART: LEA DX,D1 ;显示提示语MOV AH,9INT 21HMOV CX,4LEA SI,D2AGAIN:MOV AL,[SI]OR AL,30HMOV BL,AL ;显示低位ASCII码SHR AL,4AND AL,0FHADD AL,30HMOV DL,ALMOV AH,2INT 21HMOV AL,BL ;显示高位ASCII码AND AL,0FHADD AL,30HMOV DL,ALMOV AH,2INT 21HINC SIMOV DL,'H'MOV AH,2INT 21HLOOP AGAINRETEND START4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
微机原理实验

微机原理实验实验⼀8086指令使⽤实验⽬的通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG2、DEBUG命令: A,D,E,F,H,R,T,U。
3、BCD码,ASCII码及⽤⼗六进制数表⽰⼆进制码的⽅法。
4、8086寄存器: AX,BX,CX,DX,F,IP。
内容及步骤⼀、DEBUG 命令使⽤1、键⼊ DEBUG 进⼊ DEBUG 控制状态,显⽰提⽰符 '- '。
2、⽤命令 F100 10F 'A' 将'A'的ASCII码填⼊内存。
3、⽤命令 D100 10F 观察内存中的⼗六进制码及屏幕右边的ASCII字符。
4、⽤命令 F110 11F 41 重复上⼆项实验,观察结果并⽐较。
5、⽤命令 E100 30 31 32 …… 3F将30H-3FH写⼊地址为100开始的内存单元中,再⽤D命令观察结果,看键⼊的⼗六进制数是什么字符的ASCII码?6、⽤H命令检查下列各组⼗六进制数加减结果并和你的⼿算结果⽐较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758H,347FH7、⽤R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
8、⽤R命令将AX,BX内容改写为1050H及23A8H。
⼆、8086常⽤指令练习1、传送指令1)⽤A命令在内存100H处键⼊下列内容:-A 0100↙****:0100 MOV AX,1234↙****:0103 MOV BX,5678↙****:0106 XCHG AX,BX↙****:0108 MOV AH,35↙****:010A MOV AL,48↙****:010D MOV DX,75AB↙****:010F XCHG AX,DX↙****:0111 ↙-注:****为段寄存器CS的值,是由计算机⽣成的;↙为回车操作。
微机原理实验

一.实验目的:掌握综合性实验的编写方法二.实验内容:编写程序实现以下功能,在出现的提示信息中输入小写写字母“d”,可显示系统当前日期;输入小写写字母“t”,可显示系统当前时间;输入大写字母“q”,可结束程序。
三、源代码:STACK SEGMENT STACKDW 200 DUP (?)STACK ENDSDATA SEGMENTSPACE DB 1000 DUP (' ')PATTERN DB 6 DUP (' '),0C9H,26 DUP (0CDH),0BBH,6 DUP (' ')DB 6 DUP (' '),0BAH,26 DUP (20H),0BAH,6 DUP (' ')DB 6 DUP (' '),0C8H,26 DUP (0CDH),0BCH,6 DUP (' ')DBUFFER DB 8 DUP (':'),12 DUP (' ')DBUFFER1 DB 20 DUP (' ')STR DB 0DH,0AH, 'please input date(d) OR time(t) OR quit(q): $' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,0001H ;设置显示方式为40*25彩色文本方式INT 10HMOV AX,DATAMOV DS,AXMOV ES,AXMOV BP,OFFSET SPACEMOV DX,0B00HMOV CX,1000MOV BX,0007HMOV AX,1300HINT 10HMOV BP,OFFSET PATTERN ;显示矩形条MOV DX,0B00HMOV CX,120MOV BX,004EHMOV AX,1301HINT 10HLEA DX,STR ;显示提示信息MOV AH,9INT 21HMOV AH,1 ;从键盘输入单个字符 INT 21HCMP AL,64H ;AL='d'?JNE ACALL DATE ;显示系统日期A: CMP AL,74H ;AL='t'?JNE BCALL TIME ;显示系统时间B: CMP AL,71H ;AL='q'?JNE STARTMOV AH,4CH ;返回dos状态INT 21HDATE PROC NEAR ;显示日期子程序DISPLAY:MOV AH,2AH ;取日期INT 21HMOV SI,0MOV BX,100DIV BLMOV BL,AHCALL BCDASC1 ;日期数值转换成相应的ASCII码字符 MOV AL,BLCALL BCDASC1INC SIMOV AL,DHCALL BCDASC1INC SIMOV AL,DLCALL BCDASC1MOV BP,OFFSET DBUFFER1MOV DX,0C0DHMOV CX,20MOV BX,004EHMOV AX,1301HINT 10HMOV AH,02H ;设置光标位置MOV DX,0300HMOV BH,0INT 10HMOV BX,0018HREPEA: MOV CX,0FFFFH ;延时REPEAT:LOOP REPEATDEC BXJNZ REPEAMOV AH,01H ;读键盘缓冲区字符到AL寄存器JE DISPLAYJMP STARTMOV AX,4C00HINT 21HRETDATE ENDPTIME PROC NEAR ;显示时间子程序DISPLAY1:MOV SI,0MOV BX,100DIV BLMOV AH,2CH ;取时间INT 21HMOV AL,CHCALL BCDASC ;将时间数值转换成ASCII码字符 INC SIMOV AL,CLCALL BCDASCINC SIMOV AL,DHCALL BCDASCMOV BP,OFFSET DBUFFERMOV DX,0C0DHMOV CX,20MOV BX,004EHMOV AX,1301HINT 10HMOV AH,02HMOV DX,0300HINT 10HMOV BX,0018HRE: MOV CX,0FFFFHREA: LOOP READEC BXJNZ REMOV AH,01HINT 16HJE DISPLAY1JMP STARTMOV AX,4C00HINT 21HRETTIME ENDPBCDASC PROC NEAR ;时间数值转换成ASCII码字符子程序 PUSH BXCBWMOV BL,10DIV BLADD AL,'0'MOV DBUFFER[SI],ALINC SIADD AH,'0'MOV DBUFFER[SI],AHINC SIPOP BXRETBCDASC ENDPBCDASC1 PROC NEAR ;日期数值转换成ASCII码字符子程序 PUSH BXCBWMOV BL,10DIV BLADD AL,'0'MOV DBUFFER1[SI],ALINC SIADD AH,'0'MOV DBUFFER1[SI],AHINC SIPOP BXRETBCDASC1 ENDPCODE ENDSEND START四、实验过程:1.进入asm文件2.编译链接生成exe文件3.-u-g4c-t。
西南交大微机原理实验代码与截图(ALL)

2-1DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV SI,3500H ;设置待转换数据区的地址指针MOV DI,3510H ;设置结果数据区的地址指针MOV BX,000AH ;乘数10MOV CX,0004H ;循环4 次MOV AH,00HMOV AL,[SI] ;取第一位ASCⅡ码SUB AL,30H ;转换成二进制数A1:IMUL BX ;乘10ADD AL,[SI+01] ;加次位SUB AL,30HINC SI ;修改地址指针LOOP A1 ;循环MOV [DI],AX ;保存结果INT 3H;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START2-2DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV CX,0005H ;循环计数器赋初值MOV DI,3500H ;ASCⅡ码首址A1:MOV BL,0FFH ;将错误标志送入BLMOV AL,[DI] ;送ASCⅡ码至ALCMP AL,3AH ;比较AL 与3AJNB A2 ;不低于3A 则转A2SUB AL,30H ;低于3A 则取ASCⅡ码低4 位 JB A2 ;低于30 则转A2MOV BL,AL ;否则AL 内容送入BL,取代FF A2:MOV AL,BL ;结果或错误标志送入ALMOV [DI+0AH],ALINC DILOOP A1INT 3HCODES ENDSEND START2-5DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,0B07HMOV DS,AXMOV DI,3000HMOV DX,9111HMOV CX,2222HTEST DH,80HJZ LPXOR DX,7FFFHNOT CXADC CX,1ADC DX,0LP:MOV [DI],CLMOV [DI+1],CHMOV [DI+2],DLMOV [DI+3],DHINT 3INT 3HCODES ENDSEND START3DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV CX,10HMOV SI,3000HMOV DI,3010HCMP SI,DIJA A2ADD SI,CXADD DI,CXDEC SIDEC DIA1:MOV AL,[SI]MOV [DI],ALDEC SIDEC DIDEC CXJNE A1JE A3A2:MOV AL,[SI]MOV [DI],ALINC SIINC DIDEC CXJNE A2A3:INT 3HCODES ENDSEND START4-1DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV DX,01HMOV BL,02HA1:MOV AL,BLINC BLMUL BLADD DX,AXCMP AX,0C8HJBE A1INT 3HCODES ENDSEND START4-2DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV DI,3000HMOV CX,[DI]MOV CH,00HMOV BL,00HINC DIA1:MOV AX,[DI]CMP AX,0000HJGE A2INC BLA2:INC DILOOP A1MOV [DI],BLINT 3HCODES ENDSEND START5-1DATAS SEGMENTAA DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAS,SS:STACKS SUB1 PROC NEARCMP CX,0JE A4DEC CXMOV BH,[SI]MOV BL,BHA1:INC SIMOV AL,[SI]CMP AL,BHJAE A2CMP AL,BLJBE A3JMP A4A2:MOV BH,ALJMP A4A3:MOV BL,ALA4:LOOP A1RETSUB1 ENDPSTART:MOV AX,DATASMOV DS,AXMOV SI,OFFSET AAMOV CX,0008HCALL NEAR PTR SUB1MOV AH,BHMOV AL,BLINT 3CODE ENDSEND START实验6DATAS SEGMENTORG 3000HVAR DB 11H,0d3H,77H,6bH,0BH,33H,0aaH,21H,0ffH,67H ;此处输入数据段代码DATAS ENDSSTACKS SEGMENTDW 100 DUP(?);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,000AHMOV SI,300AHMOV BL,0FFHA1: CMP BL,0FFHJNE A4MOV BL,00HDEC CXCMP CX,0JE A4PUSH SIPUSH CXA2: DEC SIMOV AL,[SI]MOV DL,[SI-1]CMP AL,DLJA A3MOV [SI-1],ALMOV [SI],DLMOV BL,0FFHA3: LOOP A2POP CXPOP SIJMP A1A4: INT 3;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START实验七DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTSTART:MOV AL,0MOV BH,0AH ;表示前景、背景颜色MOV AH,6HMOV CX,0MOV DH,24MOV DL,79INT 10H ;清屏幕MOV AH,2MOV BH,0MOV DH,10HMOV DL,10HINT 10H ;光标设置在第10行第10列MOV CX,001AH ;共26个字母,所以循环次数为26MOV DL,'Z'LP:MOV AL,DLMOV BH,0MOV BL,2FH ;设置显示的A到Z的底色和字色MOV AH,9INT 10HDEC DLLOOP LPINT 3CODES ENDSEND START实验八.486pd8255 macro port,data1mov dx,portmov eax,data1out dx,eaxnopnopendmdata segment at 0 use16org1*4v1 dw 2 dup(?)org2*4v2 dw 2 dup(?)org3*4v3 dw 2 dup(?)org1000httt db?stackp equ2000hP255CW equ20CHP255A equ200HP255B equ204HP255C equ208Hdata endscode segment use16assume cs:code,ds:data,ss:dataorg1100hstart: nopmov ax,0mov ds,axmov ss,axmov sp,stackpiniti: mov eax,60000000hmov cr0,eaxmov ax,datamov ds,axmov ss,axmov sp,stackpmov cx,1000i0: dec cxjnz i0d8255 P255CW,80808080hi1: d8255 P255A,0c099c099hd8255 P255B,0c0c0c0c0h ;40004000 d8255 P255C,0fafafafah ;绿call del1d8255 P255C,0f5f5f5f5h ;红call del1d8255 P255C,0f0f0f0f0h ;黄call del1d8255 P255C,0ffffffffh ;灭call del1d8255 P255A,8ef8c0c0hd8255 P255B,8E8ec0c0h ;00007FFFd8255 P255C,0fafafafahcall del1d8255 P255C,0f5f5f5f5hcall del1d8255 P255C,0f0f0f0f0hcall del1d8255 P255C,0ffffffffhcall del1mov ax,4000hmov es,axmov eax,0chk: mov bx,0000h ;从4000:0000单元开始写mov es:[bx],eaxmov dx,P255Aout dx,eaxnopnopmov dx,P255Bout dx,eaxnopnoppush eax ;写入的数据入栈mov eax,0fafafafahmov dx,P255C ;绿色out dx,eaxcall del1pop eax ;出栈chk1: add bx,4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;cmp bx,8000hjz chk2 ;写满8000H个内存单元mov es:[bx],eaxjmp chk1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;chk2: mov bx,0fffchchk3: add bx,4cmp bx,8000hjz chk0cmp eax,es:[bx] ;把每个单元的数据读出与写入的jz chk3mov ecx,eax ;数据比较,是否正确mov eax,0f5f5f5f5hmov dx,P255C ;不正确,颜色变成红色out dx,eaxmov eax,ecxcall del1 ;延时chk0: add eax,01010101h ;;;;;;;;;;;;;;;;;;;;;;;;;;;cmp eax,0ffffffffh ;下一个写入的数据jz chk4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;jmp chkchk4: jmp i1del1 proc ;延时mov ecx,8ffffhi2: dec ecxjnz i2retendpcode endsend start实验10.1:(以key为原本改进).486DA TA SEGMENT AT 0 USE16ORG 1000HDA TA ENDSCODE SEGMENT USE16ASSUME CS:CODEORG 3000HBEG: JMP STARTTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FHDPORT1 EQU 360HDPORT2 EQU 380HNUM DB 0001HCOUNT DD 00000FFFFH START: MOV AX,DA TAMOV DS,AXMOV CL,5KK: MOV AL,CLMOV BX,OFFSET TAB XLAT TABMOV DX,DPORT2OUT DX,ALNOPMOV DX,DPORT1MOV AL,NUMOUT DX,ALNOPNOPROL NUM,1MOV COUNT,00000FFFFH DELAY:NOPDEC COUNTJNZ DELAYJMP KKCODE ENDSEND BEG实验10.2使显示20115158.486DA TA SEGMENT AT 0 USE16ORG 2000HBUF D D ?COUNT DB ?DB ?DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATAORG 01000HBEG: JMP STARTTAB1 DB 0A4H,0F9H,92H,92HTAB2 DB 0C0H,0F9H,0F9H,80HRG DD 050A050AHGR DD 0A050A05HRY DD 05000500HYR DD 00050005HRRRR DD 05050505HRGYR DD 050A0005H START: MOV AX,DA TAMOV DS,AXMOV DX,20CHMOV EAX,80808080HOUT DX,EAXNOPNOPL1:MOV DX,200HMOV EAX,DWORD PTR TAB1OUT DX,EAXMOV BP,200L2: DEC BPJNZ L2MOV DX,204HMOV EAX,DWORD PTR TAB2OUT DX,EAXMOV BP,200L3: DEC BPJNZ L3MOV DX,208HMOV EAX,RGYROUT DX,EAXMOV BP,200L4: DEC BPJNZ L4HLTJMP L1CODE ENDSEND BEG三连实验9;i8259.asm.486DA TA SEGMENT USE16 AT 0ORG 40H*4V40H DW ?,? ;保存中断向量的变量OPORT EQU 3A0H ;8259的偶地址JPORT EQU 3A8H ;8259的奇地址TR8255 EQU 20CH ;8255控制口地址A8255 EQU 200H ;8255A口地址B8255 EQU 204H ;8255B口地址C8255 EQU 208H ;8255C口地址ORG 1000HMM DD ?DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DA TAORG 2000HBEG: CLIJMP STARTSTART: MOV AX,DA TAMOV DS,AXMOV AX,0MOV SS,AXMOV SP,1000HMOV MM,0F5F5F5F5HMOV AL,80H ;初始化8255MOV DX,TR8255OUT DX,ALMOV AL,99HMOV DX,A8255OUT DX,ALMOV AL,5MOV DX,C8255OUT DX,ALCALL WRITEVERLLL: MOV AL,00010011B ;写ICW1MOV DX,OPORTOUT DX,ALNOPNOPMOV AL,01000000B ;写ICW2MOV DX,JPORTOUT DX,ALNOPNOPMOV AL,00000001B ;写ICW4MOV DX,JPORTOUT DX,ALNOPNOPMOV AL,11111100B ;写IMRMOV DX,JPORTOUT DX,ALSTI;---------------------------------------LL: MOV SI,1 ;等待中断LL1: MOV CX,10000LL2: NOPLOOP LL2DEC SIJNZ LL1NOPNOPNOPNOPNOPNOPNOPNOPNOPJMP LL;--------------------------------------WRITEVER PROC ;写中断向量PUSHAMOV BX, OFFSET SERVERMOV V40H,BXMOV AX,CSMOV V40H+2,AXPOPARETWRITEVER ENDP;-------------------------------------SERVER PROC ;中断服务程序,显示-SUCCESS MOV EAX,92C6C1BFHMOV DX,A8255OUT DX,EAXMOV EAX,9286C692HMOV DX,B8255OUT DX,EAXMOV EAX,MMMOV DX,C8255OUT DX,EAXNOT EAXMOV MM,EAXMOV AL,20HMOV DX,OPORTOUT DX,ALIRETSERVER ENDP;-------------------------------------CODE ENDSEND BEG实验11.486CODE SEGMENT USE16A SSUME CS:CODEO RG 1000HBEG: J MP STARTCCONPORT E QU 30CHCCONBIT1 EQU 00010110BCCONBIT2 EQU 01010100BCCONBIT3 EQU 10010110BCDPORT1 EQU 300HCDPORT2 EQU 304HCDPORT3 EQU 308HCHDBIT1 EQU 08HCHDBIT2 EQU 04HSTART: N OP ;启动延时NOPMOV DX,CCONPORT ;写入控制字MOV AL,CCONBIT1O UT DX,ALNOPNOPMOV DX,CDPORT1 ;写入初值MOV AL,CHDBIT1OUT DX,ALNOPNOPMOV DX,CCONPORT ;写入控制字MOV AL,CCONBIT2OUT DX,ALNOPNOPMOV DX,CDPORT2 ;写入初值MOV AL,CHDBIT1OUT DX,ALNOPNOPWT1: M OV DX,CCONPORT ;写入控制字M OV AL,CCONBIT3O UT DX,ALNOPNOPMOV DX,CDPORT3 ;写入初值MOV AL,CHDBIT2OUT DX,ALWT: NOPJMP WTCODE ENDSEND BEG实验13.486DA TA SEGMENT AT 0 USE16 ORG 1000HMM DB ?DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATAORG 2000HBEG: JMP STARTTAB DB 0C0H,0F9HLENS EQU $-TABC8251 EQU 330HD8251 EQU 320H CCONPORT EQU 30CHCCONBIT1 EQU 00010110B CCONBIT2 EQU 01010110B CCONBIT3 EQU 10010110B CDPORT1 EQU 300H CDPORT2 EQU 304H CDPORT3 EQU 308H CHDBIT1 EQU 9CHCHDBIT2 EQU 9CHC8255 EQU 20CHA8255 EQU 200HB8255 EQU 204HSTART: MOV AX,DA TAMOV DS,AXCALL I8254CALL I8251MOV DX,C8251IN AL,DXCALL I8255AGAIN: MOV MM,05HMOV CL,LENSMOV BX,OFFSET TABTSCAN: MOV DX,A8255MOV EAX,0FFFFFFFFHOUT DX,EAXMOV DX,B8255OUT DX,EAXMOV DX,C8251IN AL,DXTEST AL,01HJZ TSCANSEND: MOV AL,[BX]MOV DX,D8251OUT DX,ALMOV SI,0RSCAN: MOV DX,C8251IN AL,DXTEST AL,02HJNZ RECIEVEDEC SIJNZ RSCANJMP NEXTRECIEVE: MOV DX,D8251 IN AL,DXMOV DX,A8255OUT DX,ALMOV DX,B8255OUT DX,ALMOV AL,MMNOT ALMOV DX,208HOUT DX,ALMOV MM,ALMOV BP,1000HDELAY: NOPDEC BPJNZ DELAYINC BXDEC CLJNZ TSCANJMP AGAINNEXT: MOV EAX,88F9A4BFH MOV DX,A8255OUT DX,EAXMOV EAX,0A1839280HMOV DX,B8255OUT DX,EAXJMP AGAINI8254 PROCNOPNOPNOPNOPNOPNOPNOPNOPMOV DX,CCONPORTMOV AL,CCONBIT1OUT DX,ALNOPNOPMOV DX,CDPORT1MOV AL,CHDBIT1OUT DX,ALNOPNOPMOV DX,CCONPORTMOV AL,CCONBIT3OUT DX,ALNOPNOPMOV DX,CDPORT3MOV AL,CHDBIT2OUT DX,ALNOPNOPWT1: MOV DX,CCONPORT MOV AL,CCONBIT2OUT DX,ALNOPNOPMOV DX,CDPORT2MOV AL,CHDBIT2OUT DX,ALRETI8254 ENDPI8251 PROCMOV CX,3AGA: MOV AL,0MOV DX,C8251OUT DX,ALLOOP AGAMOV BP,5HD1: DEC BPJNZ D1MOV AL,40HOUT DX,ALMOV BP,5HD2: DEC BP JNZ D2MOV AL,4EHOUT DX,ALMOV BP,5HD3: DEC BP JNZ D3MOV AL,15HOUT DX,ALRETI8251 ENDPI8255 PROCMOV DX,C8255MOV EAX,80808080HOUT DX,EAXRETI8255 ENDPCODE ENDSEND BEG。
微机原理与接口技术实验报告-全实例代码

实验一上机练习实验目的:1、掌握用编辑软件编辑程序文本的方法。
在DOS环境下,熟练掌握用MASM5.0宏汇编程序对ASM文件进行编译、连接等操作步骤。
2、熟悉用DEBUG调试程序。
实验要求:选取教科书中一典型例题,用编辑软件在PC机中形成ASM文件,然后编译、连接,生成目标文件和可执行文件。
再用DEBUG程序进行调试。
实验步骤:实验程序如下:data segmentary1 db 12,34,45,56,67,78,89,90,18cont1 equ $-ary1 ;ary1的长度sum1 dw ?ary2 db 13h,24h,57h,68h,9ah,0bch,0cdh,0deh,80h,50hcont2 equ $-ary2sum2 dw ?data endscode segmentassume cs:code, ds:datastart: mov ax,datamov ds,axlea si,ary1mov cx,cont1 ;设定循环次数为ary1的个数call sumlea si,ary2mov cx,cont2call summov ah,4ch ;结束程序功能调用4CHint 21hsum proc ;求和程序段,求该段所有数之和xor ax,ax ;ax清零为下面加法准备next1: add al,[si]adc ah,0inc siloop next1mov [si],axret ;返回调用程序sum endp ;程序段结束code endsend start点击“运行”点击“编译成目标文件”,编译成功后,再“运行”=〉“生成可执行文件”,然后运行,即可。
运行成功以后,可进行调试。
点击工具栏的调试按钮,出现调试框。
其命令如下:输入a,进行逐行汇编,输入c,比较两内存块,输入d,内存信息以16进制显示;输入e,修改内存指定的字节;输入f,可以预置一段内存;输入g,执行程序;输入h,制算术运算;输入i,从指定端口地址输入;输入l,读盘;输入m,内存块传送;输入n,置文件名;输入o,从指定端口地址输出;输入q,结束DEBUG调试;输入r,显示和修改寄存器;输入s,查找字节串;输入t,跟踪执行;输入u,反汇编;输入w,存盘操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在数据段中定义变量X 、Y 、Z 、RESULT ,计算X+Y-Z,结果存入数据段中的单元中。
其中X 、Y 、Z 均为32位带符号数。
DATAS SEGMENT ;数据段
;请在这里定义您的数据
X DD 33331111H
Y DD 44442222H
Z DD 55557777H
RESULT DD ?
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
MOV AX,WORD PTR X[0]
MOV BX,WORD PTR X[2]
MOV CX,WORD PTR Y[0]
MOV DX,WORD PTR Y[2]
ADD AX,CX
ADC BX,DX
MOV CX,WORD PTR Z[0]
MOV DX,WORD PTR Z[2]
SUB AX,CX
SBB BX,DX
MOV WORD PTR RESULT[0],AX
MOV WORD PTR RESULT[2],BX
;MOV ;退出程序
INT 21H
CODES ENDS
END START
1.编写程序完成下列算式:
DATAS SEGMENT ;数据段
;请在这里定义您的数据
X DB 10
Y DB ?
DATAS ENDS
CODES SEGMENT ;代码段 Y=
10 X>0
0 X=0 -10 X<0
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
CMP X,0
JL NEXT1
JZ NEXT2
MOV Y,10
JMP COM
NEXT1:
MOV Y,-10
JMP COM
NEXT2:
MOV Y,0
COM:
CODES ENDS
END START
2.在数据段定义无符号变量X、Y和MAX,编程将X和Y中的最大数存入MAX DATAS SEGMENT ;数据段
;请在这里定义您的数据
X DB 30
Y DB 20
MAX DB ?
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
MOV AL,X
CMP AL,Y
JB NEXT1
JZ NEXT2
MOV BL,X
MOV MAX,BL
JMP COM
NEXT1: MOV CL,Y
MOV MAX,CL
JMP COM
NEXT2: MOV DL,X
MOV MAX,DL
COM:
CODES ENDS
END START
假设一个变量中存储的是一个带符号数的原码,编程求其补码。
DATAS SEGMENT ;数据段
;请在这里定义您的数据
X DB 10001010B
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
CMP X,0
JL NEXT1
JMP COM
NEXT1: NOT X
OR X,80H
ADD X,1
COM:
CODES ENDS
END START
1.统计BX寄存器中二进制1的个数。
DATAS SEGMENT ;数据段
;请在这里定义您的数据
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
MOV BX,1111101010110101B
MOV CX,16
MOV AL,0
AGAIN: ROR BX,1
JNC LP
ADD AL,1
LP: LOOP AGAIN
MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START
2.定义10个字型带符号数,求其最大值并存于max单元中。
DATAS SEGMENT ;数据段
;请在这里定义您的数据
BUFDW
1B32H,4F07H,2137H,25F9H,25E6H,98F5H,87FFH,25DCH,2735H,15ABH MAX DW ?
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
LEA SI,BUF
MOV CX,10
MOV AX,[SI]
INC SI
INC SI
DEC CX
AGAIN: CMP AX,[SI]
JGE NEXT
MOV AX,[SI]
NEXT: INC SI
INC SI
LOOP AGAIN
MOV MAX,AX
1.将BX中的十六进制数转换成4个ASCII码数据代码转换部分用子程序实现。
DATAS SEGMENT ;数据段
;请在这里定义您的数据
RESULT DB 4 DUP(?)
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
LEA SI,RESULT
MOV CX,0404H
MOV BX,0F7DCH
AGAIN: ROL BX,CL
MOV AL,BL
AND AL,0FH
CALL ASC
INC SI
DEC CH
JNZ AGAIN
ASC PROC
ADD AL,30H
CMP AL,39H
JBE COM
ADD AL,7H
COM: RET
ASC ENDP
MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START
2.从键盘接收4位十进制数,将其转换为十六进制数并显示。
注:转换结果存放在BX中。
CODE SEGMENT
ASSUME CS:CODE
START:
MOV CX,4
NEWCHAR: MOV AH, 1 ;键盘输入
INT 21H
SUB AL, 30H
JL NEWCHAR ; <0重输
CMP AL, 9
JG NEWCHAR ; >9重输
CBW
XCHG AX, BX
MOV DX, 10
MUL DX
XCHG AX, BX
ADD BX, AX
LOOP NEWCHAR
EXIT:
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV CH, 4
ROTATE: MOV CL, 4
MOV AL, BL
AND AL, 0FH
ADD AL, 30H ; ’0’~’9’ASCII 30H~39H
CMP AL, 3AH
JL PRINTIT
ADD AL, 7H ; ’A’~’F’ASCII 41H~46H PRINTIT: MOV DL, AL
MOV AH, 2
INT 21H
DEC CH
JNZ ROTATE
MOV AH,1
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
1.从键盘接收一个字符,然后显示其对应的前导、本身和后继字符。
CODES SEGMENT ;代码段
ASSUME CS:CODES
START:
;请在这里添加您的代码
MOV AH,1
INT 21H
MOV CX,3
DEC AL
LP: MOV AH,2
MOV DL,AL
INT 21H
INC AL
LOOP LP
MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START
2.在屏幕上显示26个大写英文字母A~Z。
CODES SEGMENT ;代码段
ASSUME CS:CODES
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
MOV AL,41H
MOV CX,26
LP: MOV AH,2
MOV DL,AL
INT 21H
INC AL
LOOP LP
MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START。