1、微机实验微机原理实验报告(一)班级:自动化35姓名:杨 帅学号:2130504121说明:运行平台:windows XP 32位 虚拟机DOS下调试工具:debug 系列指令代码编写:Notepad+(有语法高亮)Q1. 设有两个8个字节长的BCD码数据bcd1和bcd2。bcd1数以1000H为首地址在内存中顺序存放;bcd2数以2000H为首地址在内存中顺序存放。要求将其相加后的结果按顺序存放在以2000H为首地址的内存区中。实验思路: 可以使用LOOP循环实现加法,使用BX进行寻址和存储移位的控制。实验代码:Data segmentorg 1000Hbcd1 DB 01H,03H,05H
2、,07H,09H,0BH,0DH,0FHorg 2000Hbcd2 DB 00H,02H,04H,06H,08H,0AH,0CH,0EHData endscode segment assume CS:code,DS:Datastart: MOV AX, Data MOV DS, AX MOV CX, 8 MOV BX, 0H CLC ;let CF=0L1: MOV AL, BX+1000H ADD AL, BX+2000H DAA ;fadd adjust MOV BX+2000H, AL INC BX LOOP L1 MOV AH, 4CH INT 21Hcode endsend star
3、t实验结果:(图仅为部分步骤)Q2. 设从2000H为首地址的内存中存放着10个带符号的字节数据,编程找出其中最大的数,并存入2000H单元中。实验思路: 用dl存储当前最大的值,并不断循环替换。实验代码:data segmentbcd db 01h,02h,03h,04h,05h,06h,07h,08h,09h,00hdata endscode segment assume cs:code,ds:datastart: mov ax, data mov ds, ax mov ax, code mov cs, ax ;mov ds:2000h, bcd ;move bcd to 2000h ad
4、dress mov si, 2000h mov cx, 10 ;number of byte mov dl, 00h ;minumum numberL1: lodsb ;load a number to AL cmp al, dl jng L2 ;aldl, move al to dlL2: loop L1 mov ds:2000h, dl mov ah, 4ch int 21hcode endsend start实验结果: 运行前的初始状态 可以看到运行到最后一步之后,DL = 09H,即数据中最大的一个。Q3. 试编写程序,统计出某数组相邻两数之间符号变化的次数。实验思路:实验代码:DAT
5、A SEGMENT ARRAY DB 1,-1,2,-2,3,-3,4,-4,5,-5 NUM DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX LEA SI, ARRAY MOV AL, SI ;get the 1st byte MOV BL, 0 ;clear MOV CX, 9 ;10-1AGAIN: INC SI XOR AL, SI JNS NEXT ;SF=0,same sign INC BLNEXT: MOV AL, SI LOOP AGAIN MOV NUM, BL M
6、OV AH, 4CH INT 21HCODE ENDSEND START实验结果:可以看到,运行结束之后,BL = 09H,即数组正负变化的次数。Q4. 试编制一程序用乘法指令实现32位二进制数和16位的相乘。实验思路:实验代码:.MODEL SMALL.8086.DATA N1 DW 1234H ;32位数的高位 N2 DW 5678H ;32位数的低位 N3 DW 1212H ;16位数字 M1 DW 0 M2 DW 0 M3 DW 0.CODE.STARTUP MOV AX, N2 MUL N3 ;AL和N3相乘 MOV M3, AX MOV M2, DX MOV AX, N3 MUL
7、N1 ;将N1与N3相乘 ADD M2, AX ;将乘积的低16位加上之前乘积的高16位 ADC M1, DX ;高16位加0.EXIT END实验结果:Q5. 设有两个等字长,字节型字符串,试编写汇编程序比较它们是否完全相等,若是,则将字符Y送入AL,否则将N送入AL。实验思路:实验代码:DATA SEGMENTSTR1 DB XIANJIAOTONGDAXUE,$STR2 DB SHANGHAIJIAODAXUE,$DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AX, DS M
8、OV ES, AX ;prepare for CMPSB LEA SI, STR1 LEA DI, STR2 MOV CX, 17 ;number of characters REPZ CMPSB STR1, STR2 JNZ NOTZ MOV AL, Y JMP RETURNNOTZ: MOV AL, NRETURN: MOV AH, 4CH INT 21HCODE ENDSEND START实验结果: 可以看到,执行INT 21H指令之后,AL = 4EH,即字符N的ASCII值。心得体会:这次实验中遇到了很多的困难,比如程序出错时不知道该如何下手修改和调试,整个过程我几乎用的都是dos下的debug命令来进行调试的,也是因为没有找到更佳方便的工具和IDE。不过辛苦之后完成了实验还是很开心的。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1