微机原理实验答案汇总

微机原理实验答案汇总
微机原理实验答案汇总

1.题目:编程将(AX)=2387、(BX)=192FH、(CX)=9256中的无符号数按由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。

CODE SEGMENT

ASSUME CS:CODE

START:

MOV AX,2387

MOV BX,192FH

MOV CX,9256

CMP AX,BX

JAE NEXT1

XCHG AX,BX

NEXT1:

CMP AX,CX

JAE NEXT2

XCHG AX,CX

NEXT2:

CMP BX,CX

JAE NEXT3

XCHG BX,CX

NEXT3:

MOV AH,4CH

INT 21H

CODE ENDS

END START

2.题目:编程将(BX)=8600H、(CX)=3489H、(DX)=9235按有符号数由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。

;CODE SEGMENT

ASSUME CS:CODE

START:

MOV BX,8600h

MOV CX,3489H

MOV DX,9235

CMP BX,CX

JGE NEXT1

XCHG BX,CX

NEXT1:

CMP BX,DX

JGE NEXT2

XCHG BX,DX

NEXT2:

CMP CX,DX

JGE NEXT3

XCHG CX,DX

NEXT3:

MOV AH,4CH

INT 21H

CODE ENDS

END START

3.题目:在数据段中定义如下数据:32,34,89H,,编程将以上数据按有符号数进行排序,并将程序和结果记录下来。

DATA SEGMENT

NUM DB 32,34,89H

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DAT

START:

MOV AX,DATA

MOV DS,AX ;初始化DS

LEA BX,NUM ;取有效地址到BX,以便访问要排序的数

MOV AL,[BX]

CMP AL,[BX+1]

JGE NEXT1 ;若第一个数大则跳转,否则将第一个与第二个数交换

XCHG AL,[BX+1]

MOV [BX],AL

NEXT1:

CMP AL,[BX+2]

JGE NEXT2;若第一个数大则跳转,否则将第一个与第三个数交换

XCHG AL,[BX+2]

MOV [BX],AL

NEXT2:

MOV AL,[BX+1];将第二个和第三个数比较

CMP AL,[BX+2]

JGE NEXT3;若第二个数大则跳转,否则将第二个与第三个数交换

XCHG AL,[BX+2]

MOV [BX+1],AL

NEXT3:

MOV AH,4CH

INT 21H

CODE ENDS

END START

4.题目:在数据段中定义如下数据:99,25,86,编程将以上数据按无符号数进行排序,上机调试出程序,并将程序和结果记录下来。

data segment

num db 99h,25h,86h

data ends

code segment

assume cs:code,ds:data

start:mov ax,data

mov ds,ax

lea bx,num

mov al,[bx]

cmp al,[bx+1]

jae next1

xchg al,[bx+1]

mov [bx],al

next1:cmp al,[bx+2]

jae next2

xchg al,[bx+2]

mov[bx],al

next2:mov al,[bx+1]

cmp al,[bx+2]

jae next3

xchg al,[bx+2]

mov [bx+1],al

next3: mov ah,4ch

int 21h

code ends

end start

5.题目:(AL)=86H,(AH)=34H,(BL)=78H,编程将以上数据按有符号数进行排序,上机调试出程序,并将程序和结果记录下来。

code segment

assume cs:code

start: mov al,86h

mov ah,34h

mov bl,78h

cmp al,ah

jae next1

xchg al,ah

next1: cmp al,bl

jae next2

xchg al,bl

next2: cmp ah,bl

jae next3

xchg ah,bl

next3: mov ah,4ch

int 21h

code ends

end start

6.题目:中断向量为:1234:5678H,编程将此中断向量写入类型0所在的中断向量表,上机调试出程序,并将程序和结果记录下来。(直接用MOV 指令写入即可)

code segment

assume cs:code,ds:code

start:xor ax,ax

mov ds,ax

mov bx,0

mov cl,2

shl bx,cl

mov word ptr[bx],5678h

mov word ptr[bx+2],1234h

mov ah,4ch

int 21h

code ends

end start

7.题目:中断向量为:3456:6678H,编程将此中断向量写入类型60H所在的中断向量表,上机调试出程序,并将程序和结果记录下来。(直接用MOV 指令写入即可)

CODE SEGMENT

ASSUME CS:CODE,DS:CODE

START:

XOR AX,AX

MOV DS,AX ;初始化DS,中断向量表在0段

MOV BX,60H

MOV CL,2

SHL BX,CL ;让中断类型化左移两位,以便实现乘以4作为中断向量地址

MOV WORD PTR [BX],5678H

MOV WORD PTR [BX+2],1234H

MOV AH,4CH

INT 21H

CODE ENDS

END START

8.题目:中断向量为:编程将中断向量类型60H所对应的中断向量从中断向量表中取出来分别放在ES和DI中,上机调试出程序,并将程序和结果记录下来。(直接用MOV 指令即可)CODE SEGMENT

ASSUME CS:CODE,DS:CODE

START:

XOR AX,AX

MOV DS,AX ;初始化DS,中断向量表在0段

MOV BX,60H

MOV CL,2

SHL BX,CL ;让中断类型化左移两位,以便实现乘以4作为中断向量地址

MOV DI,WORD PTR [BX]

MOV ES,WORD PTR [BX+2]

MOV AH,4CH

INT 21H

CODE ENDS

END START

9.题目:中断向量为:编程将中断向量类型21H所对应的中断向量从中断向量表中取出来分别

放在SI和BP中,上机调试出程序,并将程序和结果记录下来。(直接用MOV 指令即可)code segment

assume cs:code,ds:code

start:xor ax,ax

mov ds,ax

mov bx,21h

mov cl,2

shl bx,cl

mov si, word ptr[bx]

mov bp,word ptr[bx+2]

mov ah,4ch

int 21h

code ends

end start

10.题目:中断向量为:编程将中断向量类型45H所对应的中断向量从中断向量表中取出来分别放在DI和BP中,上机调试出程序,并将程序和结果记录下来。(直接用MOV 指令即可)code segment

assume cs:code,ds:code

start:xor ax,ax

mov ds,ax

mov bx,45h

mov cl,2

shl bx,cl

mov di, word ptr[bx]

mov bp,word ptr[bx+2]

mov ah,4ch

int 21h

code ends

end start

11.题目:利用实验箱中的8255并口芯片实现1个发光二极管的闪烁。

io8255a equ 288h

io8255b equ 28bh

io8255c equ 28ah

code segment

assume cs:code

start: mov dx,28bh

mov al,80h

out dx,al

mov cx,5

disp: mov al,03h

out dx,al

push cx

mov cx,10h

delay: loop delay

pop cx

mov al,02h

out dx,al

loop disp

mov ah,4ch

int 21h

code ends

end start

12.题目:在交通灯实验中请使用8255的C口按位置1/置0 的功能实现如下现象:南北路口的绿灯、东西路口的红灯同时亮30秒左右。

io8255a equ 288h

io8255b equ 28bh

io8255c equ 28ah

code segment

assume cs:code

start: mov dx,28bh

mov al,80h

out dx,al

disp: mov al,0bh

out dx,al

mov al,05h

out dx,al

mov cx,2000h

de1: mov di,9000h

de0: dec di

jnz de0

loop de1

mov dl,0ffh ;判断是否有按键

mov ah,06h

int 21h

mov ah,4ch

int 21h

code ends

end start

13 .题目:在交通灯实验中,请使用8255的C口按位置1/置0 的功能实现如下现象:东西路口的黄灯闪烁5次。

;设8255的CS片选地址接280H-287H

;PC1接黄色发光二极管

CODE SEGMENT

ASSUME CS:CODE

START:

MOV DX,28bH

MOV AL,80H

OUT DX,AL ;8255初始化

MOV CX,5

DISP:

MOB AL,03H

OUT DX,AL ;PC1通过控制端口置位,点亮黄灯

PUSH CX ;暂时保存CX值,因为下面的循环要用到

MOV CX,100H

DELAY:

LOOP DELAY ;延时循环,可以调节

POP CX

MOV AL,02H

OUT DX,AL ;PC1通过控制端口清零,熄灭黄灯

LOOP DISP ;总共循环5次,黄灯亮灭5次,即闪烁5次

MOV AH,4CH

INT 21H

CODE ENDS

END START

14. 题目:利用8255A的PC7产生负脉冲:

io8255a equ 288h

io8255b equ 28bh

io8255c equ 28ah

code segment

assume cs:code

start: mov dx,28bh

mov al,80h

out dx,al

mov cx,10

disp: mov al,03h

out dx,al

push cx

mov cx,10h

delay: loop delay

pop cx

mov al,02h

out dx,al

loop disp

mov ah,4ch

int 21h

code ends

end start

15. 题目:在使用8个开关控制8个LED的实验中,请利用8255的A口作为输入端口,C口作为输出端口实现原来的实验现象。

io8255a equ 288h

io8255b equ 28bh

io8255c equ 28ah

code segment

assume cs:code

start: mov dx,io8255b ;设8255为C口输出,A口输入

mov al,90h

out dx,al

inout: mov dx,io8255a ;从A口输入一数据

in al,dx

mov dx,io8255c ;从C口输出刚才自A口

out dx,al ;所输入的数据

mov dl,0ffh ;判断是否有按键

mov ah,06h

int 21h

jz inout ;若无,则继续自a口输入,c口输出

mov ah,4ch ;否则返回

int 21h

code ends

end start

16. 题目:在交通灯实验中,请使用8255的C口按位置1/置0 的功能实现如下现象:南北路口的红灯、东西路口的绿灯同时亮30秒左右。

io8255a equ 288h

io8255b equ 28bh

io8255c equ 28ah

code segment

assume cs:code

start: mov dx,28bh

mov al,80h

out dx,al

disp: mov al,0fh

out dx,al

mov al,01h

out dx,al

mov cx,2000h

de1: mov di,9000h

de0: dec di

jnz de0

loop de1

mov dl,0ffh ;判断是否有按键

mov ah,06h

int 21h

mov ah,4ch

int 21h

end start

17. 题目:在交通灯实验中,请使用8255的C口按位置1/置0 的功能实现如下现象:南北路口的黄灯闪烁5次。

io8255a equ 288h

io8255b equ 28bh

io8255c equ 28ah

code segment

assume cs:code

start: mov dx,28bh

mov al,80h

out dx,al

mov cx,5

disp: mov al,0ch

out dx,al

push cx

mov cx,10h

delay: loop delay

pop cx

mov al,0bh

out dx,al

loop disp

mov ah,4ch

int 21h

code ends

end start

18. 题目: 在模/数转换器实验中,实现以下条件下的A/D转换,模拟量的输入通道:IN1;A/D 转换器的地址:2B8H;显示结果中不出现大写字母。

CODE SEGMENT

ASSUME CS:CODE

START:

XOR AX,AX

MOV DX,2B9H ;2B8H为IN1的地址

OUT DX,AL ;启动A/D转换

NOP

NOP

IN AL,DX

MOV BL,AL; 暂时保存读入的值,因为后面显示时会修改AL的值

MOV DL,AL

MOV CL,4

ROL DL,CL ;将要显示的高四位移到低四位去

AND DL,0FH ;将高四位清掉,目的显示原读入数据的高四位,即当前DL中的低四位

ADD DL,30H

CMP DL,39H

ADD DL,27H ;若是十六进制数A-F,则加27H,显示对应小写字母

NEXT:

MOV AH,02H

INT 21H ;显示A/D转换结果的高四位

MOV DL,BL

AND DL,0FH

ADD DL,30H

CMP DL,39H

JBE NEXT1

ADD DL,27H ;若是十六进制数A-F,则加27H,显示对应小写字母

NEXT1:

MOV AH,02H

INT 21H ;显示A/D转换结果的低四位

MOV AH,4CH

INT 21H

CODE ENDS

END START

19. 题目:利用可编程计数定时器8253A的计数器0和计数器2,输出100Hz的的信号,连接必要的连线,编写初始化程序。上机调试出程序,并将程序记录下来。

CODE SEGMENT

ASSUME CS:CODE

START:

MOV DX,283H

MOV AL,00010110B;计数器0的模式字,只写低八位,工作方式3,计数初值为二进制

OUT DX,AL ;写计数器0的工作模式字

MOV AL,100

MOV DX,280H

OUT DX,AL ;写计数器0的计数初值,二进制,只写低八位

MOV DX,283H;此句新添加,对计数器2的初始化模式字应写入到控制端口

MOV AL,10010110B;计数器2的模式字,只写低八位,工作方式3,计数初值为二进制

OUT DX,AL ;写计数器2的工作模式字

MOV AL,100

MOV DX,282H

OUT DX,AL ;写计数器2的计数初值,二进制,只写低八位,至此已完成初始化

MOV AH,4CH

INT 21H

CODE ENDS

END START

20. 题目:利用可编程计数定时器8253A的计数器1和计数器2,输出50Hz的的信号,连接必要的连线,编写初始化程序。上机调试出程序,并将程序记录下来。

code segment

assume cs:code

start:mov dx,283h

mov al,01010110b

out dx,al

mov al,200

mov dx,281h

out dx,al

mov al,10010110b

out dx,al

mov al,200

mov dx,280h

out dx,al

mov ah,4ch

int 21h

code ends

end start

21. 用A命令汇编一条INT 21H 指令,用命令T单步执行该指令,比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况。

提示:注意21H这个中断类型号与中断向量地址、中断向量的关系,注意执行中断时要压入堆栈保护的内容:FR、CS、IP

22. 用命令A汇编下列程序段,用命令T 跟踪执行,判断程序段能否完成指定功能。

程序段完成将DS:2000H开始的 5 个字节内存内容相加,并把相加的结果存放在 DS:2005H 和DS:2006H 内存单元中,注意:要考虑进位。

MOV CX,5

MOV AL,0

MOV BX,2000H

next: ADD AL,[BX]

INC BX

DEC CX

LOOP next ; (CX)-1-> (CX), (CX)≠0转next

MOV [BX],AL

答案:

MOV CX,5

MOV AL,0

MOV BX,2000H

CLC ;应加清进位命令

MOV AH,0 ;2008年12月份修改

next: ADD AL,[BX] ;原先为ADD命令

ADC AH,0

INC BX

DEC CX ;这一句是多余的,应删除掉,因为loop里面隐含了CX=CX-1 LOOP next ; (CX)-1-> (CX), (CX)≠0转next

MOV [BX],AL ;保存和

MOV AL,0

ADC AL,0 ;将进位加到AL中

MOV [BX+1] ,AH;保存进位

23. 编写完整的汇编语言程序,实现两个双字的加法,假设第一个操作数是10008423H,放在2000H处,第二个操作数是2007F00H,放在了3000H处。

DATA SEGMENT

ORG 2000H

NUM1 DD 10008423H

CNUM DB ? ;存放进位标志

ORG 3000H

NUM2 DD 2007F00H

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX ;初始化DS

LEA BX,NUM1 ;取有效地址到BX,以便访问要排序的数

LEA SI,NUM2

MOV AX,WORD PTR [BX]

ADD AX,WORD PTR [SI]

MOV WORD PTR [BX],AX

MOV AX,WORD PTR [BX+2]

ADC AX,WORD PTR [SI+2]

MOV WORD PTR[BX+2],AX

MOV AL,0

ADC AL,0

MOV BYTE PTR [BX+4],AL ;保存进位原先方括号内为BX+3

MOV AH,4CH

INT 21H

CODE ENDS

END START

24. 编写完整的汇编语言程序,实现:把“Hello, Liaocheng University”传送到另外一个段的内存单元处,注意:不准使用movsb/movsw指令。

DATA SEGMENT

STR1 DB 'Hello, Liaocheng University'

LENT DB ?

DATA ENDS

EXTRA SEGMENT

STR2 DB 30 DUP (?)

EXTRA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:EXTRA

START:

MOV AX,DATA

MOV DS,AX ;初始化DS

MOV AX,EXTRA

MOV ES,AX

LEA SI,STR1 ;取有效地址到BX,以便访问要排序的数

LEA DI,STR2

MOV CX,LENT-STR1

LPTRANS:

MOV AL,[SI]

MOV ES:[DI],AL

INC SI

INC DI

LOOP LPTRANS

MOV AH,4CH

INT 21H

CODE ENDS

END START

25. 用D命令查看中断向量表, 查找int 17h对应的中断向量,并把中断向量修改为:1234H:5678H。

code segment

assume cs:code,ds:code

start:xor ax,ax

mov ds,ax

mov bx,17h

mov cl,2

shl bx,cl

mov word ptr[bx],5678h

mov word ptr[bx+2],1234h

mov ah,4ch

int 21h

code ends

end start

26. 编写完整的汇编语言程序,把内存3000H:2000H起30个字节数据传送到内存 2000H:1000H 开始处。

data segment

data ends

code segment

assume cs:code,ds:data

start: mov ax,3000h

mov ds,ax

mov si,2000h

mov ax,2000h

mov es,ax

mov di,1000h

mov cx,30

a1: mov al,[si]

mov es:[di],al

inc si

inc di

loop a1

mov ah,4ch

int 21h

code ends

end start

27. 编写完整的汇编语言程序,实现:显示字符串“Hello World!”,并利用debug跟踪该程序的执行过程

DATA SEGMENT

STR1 DB "Hello World!”,"$"

LENT DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX ;初始化DS

LEA DX,STR1

MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

28. 编写完整的汇编语言程序,实现子程序的功能演示

DATA SEGMENT

STR1 DB 'Hello, Liaocheng University',"$"

LENT DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX ;初始化DS

LEA DX,STR1

CALL DISP

MOV AH,4CH

INT 21H

DISP PROC

MOV AH,09H

INT 21H

RET

DISP ENDP

CODE ENDS

END START

29. 自编程序或者利用debug,说明T、P、G命令的不同之处

;说明:T、P命令都是单步执行命令,但T命令跟踪到子程序和中断中去,而P则将子程序看做一条命令,不跟踪到内部执行,G命令则为连续执行命令

30. 说明可读写内存RAM和只读内存ROM的区别,并利用debug演示

提示:用-D 200 22F 显示,用-E 200 22F ‘A’修改内容,可以查看F000:1000H单元的让ROM 读写情况

-D DS:200 22F

-D F000:200 22F

-F DS:200 22F 41

-D F000:200 22F 41

31.编写完整的汇编语言程序,实现:显示字符串“Hello World!”,注意:不准使用AH=9的DOS系统功能调用,提示:可以使用AH=2的DOS系统功能调用(字符显示功能)

DATA SEGMENT

STR1 DB 'Hello, Liaocheng University'

LENT DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX ;初始化DS

LEA BX,STR1

MOV CX,LENT-STR1

DISP:

MOV DL,[BX]

MOV AH,02H

INT 21H

INC BX

LOOP DISP

MOV AH,4CH

INT 21H

CODE ENDS

END START

32. 判断指令正误,并且把错误的指令改正过来。

1) ROR AX,8 MOV CL,8 ROR AX,CL

2) LEA DI,[AX] LEA DI,[SI]

3) MOV DS,2010 MOV BX,2010 MOV DS,BX

4) PUSH AL PUSH AX

5) OUT A00,AL MOV DX,A00 OUT DX,AL

微机原理与汇编语言程序设计汇编实验报告

(此文档为word格式,下载后您可任意编辑修改!) 昆明学院课程设计(大作业)

目录 1题目分析 (5) 2基本理论 (5) 3 总体设计 (6) 3.1 本程序的功能结构图 (6) 3.2字符输入及存储设计 (8) 3.3加、减、乘、除法运算的判断设计 (8) 3.4加、减、乘、除法运算的设计 (9) 4实验器材 (10) 5方法步骤 (11) 6成效分析 (11) 6.1运行界面分析 (11) 6.2调试过程及分析 (13) 7心得体会 (14) 8参考文献 (14) 9附录 (14) 课程设计(大作业)报告 一、题目分析 本次设计的简单计算器,主要是为了解决数学中的加、减、乘、除四则运算 的问题。重点和难点主要包括以下几个方面: (1)利用BIOS调用中INT 16H调用中的子程序完成清屏、设置显示方式、设置窗口等操作。

(2)利用INT 21H DOS系统功能调用中的键盘输入接收十进制操作数和运算符由程序完成字符转换为二进制数,并存储起来。 (3)根据运算符完成运算,由程序在屏幕上显示运算结果。 1、十进制数转换为二进制数过程如下: (1)将BX清0. (2)从键盘接收一个按键的ASCII送AL中,并判断是否为0到9之间的字符,若不是转退出;否则将AL中内容减30H,转换为相应数字的二 进制数,并扩展到AX中,然后将BX中内容乘以10后,再加上AX中 的内容。 (3)转(2)继续执行 因此程序退出后,BX中的内容即为所输入十进制数的二进制值。 例如:首先将BX清0后,先输入数字“5”,则(AL)=35H,属于0 到9之间的数字,减30H后,(AL)=05H,扩展后,(AX)=0005H,BX 乘以10后,加上AX中的内容,(BX)=0005H。 然后输入数字“8”,则(AL)=38H,属于0到9 之间的数字,减30H 后,(AL)=38H,扩展后,(AX)=0008H,(BX)乘以10后,加上AX 中的内容,(BX)=0037H,为十进制数“58”的二进制值。 十进制数显示过程如下(被显示的数据<9999): (1)将被显示的内容送入BX中; (2)BX除以1000,余数送BX,商在AL中,范围为0~9; (3)显示AL中的内容; (4)(BX)除以100,余数送BX,商在AL中,范围为0~9; (5)显示AL中的内容。以此类推,直到分离出个位数字为止。 在这里有一个特殊问题需要讨论:例如“53”这个十进制数,除以1000除以100的商都为0,不应显示。为了能够实现高位的“0”不显示,程序中设置一个标志M,初始值都设置为1。若M=1且商为0,则这个0不现实;若M=1且商不为0,则说明这是第一个非0数字,开始显示,并将M设置为0;若M=0,则商值都显示。如果结果本身就是0,则个位的0显示。 二、基本理论 本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

微机原理及应用实验(题目)

微机原理及应用实验 实验一开发环境的使用 一、实验目的 掌握伟福开发环境的使用方法,包括源程序的输入、汇编、修改;工作寄存器内容的查看、修改;内部、外部RAM内容的查看、修改;PSW中个状态位的查看;机器码的查看;程序的各种运行方式,如单步执行、连续执行,断点的设置。二、实验内容 在伟福开发环境中编辑、汇编、执行一段汇编语言程序,把单片机片内的 30H~7FH 单元清零。 三、实验设备 PC机一台。 四、实验步骤 用连续或者单步的方式运行程序,检查30H-7FH 执行前后的内容变化。五、实验思考 1.如果需把30H-7FH 的内容改为55H,如何修改程序? 2.如何把128B的用户RAM全部清零? 六、程序清单 文件名称:CLEAR.ASM ORG 0000H CLEAR: MOV R0,#30H ;30H 送R0寄存器 MOV R6,#50H ;50H 送R6寄存器(用作计数器) CLR1: MOV A,#00H ;00 送累加器A MOV @R0,A ;00 送到30H-7FH 单元 INC R0 ;R0 加1 DJNZ R6,CLR1 ;不到50H个字节,继续 WAIT: LJMP WAIT END 实验二数据传送 一、实验目的 掌握MCS-51指令系统中的数据传送类指令的应用,通过实验,切实掌握数据传送类指令的各种不同的寻址方式的应用。 二、实验内容 1.编制一段程序,要求程序中包含7中不同寻址方式。 2.编制一段程序,将片内RAM30H~32H中的数据传送到片内RAM38H~3AH中。 3.编制一段程序,将片内RAM30H~32H中的数据传送到片外RAM1000H~1002H 中。 4.编制一段程序,将片内RAM40H~42H中的数据与片外RAM2000H~2002H中的数据互换。 三、实验设备 PC机一台。

内蒙古工业大学微机原理实验指导答案.doc

被嗅材尊机原理与旅用实验指导布实验 程禹够告 沽说:信息工程修陇班披, 电8 77-7班g生名:Eg 样号,2011202030 实验一编辑、汇编、 连接、调试程序的使用 程序设计A 设计要求 (1)将FFFFH 送到AX, SI, DI, BP, DS, ES 寄存器 (2)编程(利用DEBUG调试程序,每执行一次T命令后,记录相关寄存器

内容,并判断是否正确。)程序如下: CODE SEGMENT ASSUME CS:CODE START PROC FAR STTPUSH DS SUB AX,AX PUSH AX MOV AX,0FFFFH MOV SI,AX MOV DI,AX MOV BP,AX MOV DS,AX MOV ES,AX RET STARTENDP CODE ENDS END STT B、设计要求 ⑴将1,2,3,4,5分别送到数据段偏移地址为1000H, 1001H, 1002H, 1003H, 1004H,单元中。 ⑵编程 DATA SEGMENT ORG 1000H DATA ENDS CODE SEGMENT ASSUME CS:CODE START PROC FAR STTPUSH DS SUB AX,AX PUSH AX MOV AX, DATA MOV DS,AX MOV AL,1 MOV DS:[1000H],AL

MOV AL,2 MOV DS:[1001H],AL MOV AL,3 MOV DS:[1002H],AL MOV AL,4 MOV DS:[1003H],AL MOV AL,5 MOV DS:[1004H],AL RET STARTENDP CODE ENDS END STT 实验二、加法程序设计 设计内容A、设计要求 (1)在数据段偏移地址1000H处开始,连续存放有3字节的数据(高位对应高地 址,低位对应低地址),1003H处开始连续存放有两字节的数据(高对高,低 对低),求这两数据之和,并将结果放在流量数据之后。(eg: 1234 56H+78 9AH=12 AC FOH) (2)编程 DATA SEGMENT ORG 1000H H1 DB56H J34H,12H,9AH,78H H2 DB 3DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START PROC FAR STTPUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOVSIJOOOH MOV DI,1003H MOV BX,1005H MOV CX,2 CLC LP:MOVAL,[SI] MOV DL,[DI[ ADCAL,DL MOV [BX],AL INC SI

微机原理实验报告软件实验1-4

微机原理实验报告 学院:算机科学与软件教育学院 1. 掌握存储器读写方法 2. 了解存储器的块操作方法 二、实验原理 存储器读写和块操作 三、实验设备仪器及材料 计算机,WA VE 6000软件 四、实验过程 S1.asm 代码流程图 data segment Block db 256 dup(55h) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov bx, offset Block ; 起始地址 mov cx, 256 ; 清256 字节Again: mov [bx], byte ptr 0 inc bx ; 地址+1 Loop Again ; 记数减一jmp $ ;死循环code ends end start

五、实验步骤 (1) 进入Wave6000,输入程序并检查,保存程序。 (2) “编译”程序。 (3) “全速执行”程序。 (4) “暂停”程序运行,在“数据窗口(MEMOREY)”查看0400H起始的单元内容,并记录。 (5) 在指令“jmp $”处设断点。“全速执行”程序。 (6) 在“数据窗口(MEMOREY)”查看0400H起始的单元内容,记录并分析实验结果。 六、实验结果及总结 运行前:运行后: 2、调试:如何将存储器块的内容置成某固定值(例全填充为0FFH)? 总结:通过本实验,我了解到单片机读写存储器的读写方法,同时也了解到单片机编程,调试方法。学会内存的移动方法,也加深对存储器读写的认识。

微机原理实验报告 学院:算机科学与软件教育学院 实验 课程 名 微机原理实验成绩实验 项目名称实验二、二进制到BCD码转换 指导老 师 1. 了解BCD值和ASCII值的区别。 2. 了解如何将BCD值转换成ASCII值。 3. 了解如何查表进行数值转换及快速计算。 二、实验原理 ASCII码表 三、实验设备仪器及材料 计算机,WA VE 6000软件 data segment Result db 3 dup(?) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov ax, 123 mov cl, 100 div cl mov Result, al ; 除以 100, 得百位数 mov al, ah mov ah, 0 mov cl, 10 div cl mov Result+1, al ; 余数除以 10, 得十位数 mov Result+2, ah ; 余数为个位 数 jmp $ code ends end start 代码流程图

微机原理-实验一-汇编语言-冒泡排序

微机原理实验报告 班级:XXXXX 姓名:XXXX 学号:20XXXX XXXXX大学 信息科学与技术学院 信息工程系

实验一汇编语言程序设计-(具体题目) 一、实验目的(根据实际情况修改): 1、熟悉MASM编译环境,了解程序的汇编方法; 2、熟悉常用汇编指令,学习汇编程序设计方法; 3、学习汇编语言的调试过程,通过调试过程认识CPU执行程序的方式; 4、了解冒泡法原理,学习多重循环的编程方法。 二、实验内容: 编写程序,用冒泡法实现将数据段内9,8,7,6,5,4,3,2,1按照由小到大的顺序重新排列。 三、程序流程图和程序代码 1、流程图 2、代码与注释(代码不能和指导书完全一样,写出注释,写出寄存器尤其是DS的值)

data segment buf1 db 8,7,6,5,4,3,2,1 data ends code segment assume cs:code,ds:data start: mov ax,data //传送数据段data mov ds,ax mov dx,7 //dx放外循环7次 L3: mov cx,dx //cx放内循环7次 lea si,buf1 //将db里的数据传送到si L2: mov al,[si] cmp al,[si+1] //比较[si]与[si+1] jb L1 //[si]<[si+1],跳转到L1 xchg al,[si+1] //[si]>[si+1],两两交换 mov [si],al L1: inc si //si减1 loop L2 //循环L2 dec dx //外循环减1,没减到0则跳转到L3 jnz L3 //入内循环,计数初值 mov ah,4ch int 21h code ends end start 四、调试过程及遇到的问题 1、程序执行截图

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

微机原理及应用实验报告

微机原理及应用实验报告 班级:机械1301班 姓名:黄佳清 学号:0801130117 座位号: 中南大学机电工程学院

实验一单片机仿真开发机操作和MCS-51指令系统应用 一.实验目的 1、熟悉MCS-51单片机仿真开发机和开发调试软件的操作使用和调整; 2、学会编写和输入汇编语言源程序、对输入的源程序进行汇编; 3、掌握程序的调试和运行的各种方法。 三.实验内容及步骤(完成分值:60分) 本实验秩序运行Keil uVersion2程序,设置为keil为纯软件仿真 1.新建工程项目 2.设置工程文件参数 3.编写新程序事例 4.调试程序直至能够运行出结果。 四.实验程序 AJMP MAIN ORG 0030H MAIN: MOV R0,#20H MOV R2,#0FH MOV A,#00H A1: MOV @R0,A INC R0 INC A DJNZ R2,A1 MOV R0,#20H ;暂停,观察并记录! MOV DPTR,#7000H MOV R2,#0FH A2: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R2,A2 MOV R0,#030H ;断点,观察并记录! MOV DPTR,#7000H MOV R2,#0FH A3: MOVX A,@DPTR MOVX @R0,A INC R0 INC DPTR DJNZ R2,A3 DO: LJMP DO END ;内部存储器数据块赋值,搬运数据块到外部存储器,再搬运回内部数据存储器。 五、附加题 1.将光标移到想要暂停的地方,MOV R0,#20H所在行,选择“执行到光

微机原理(单片机汇编)实验报告

软件实验报告 软件实验一 一、实验目的 1.熟悉软件实验的基本步骤和汇编程序的调试方法; 2.了解内存块的移动方法; 3.了解将十六进制数转换成ASCII值的方法。 二、实验原理 用MOV和MOVX指令可以进行数据的赋值和移动,用循环可以完成大量数据的复制。 三、实验内容及步骤 1、软件设置为模拟调试状态,在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。打开CPU窗口,观察CPU窗口各寄存器的变化。打开View菜单中的Memory Window,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。在Address窗口输入X:8000H后回车,观察8000H-800FF起始的256个字节单元的内容。 2、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。打开View菜单中的Memory Window,在Address 窗口的Memory#1输入X:3000H后回车,点击运行按钮后, 在Memory#2输入X:4000H后回车,观察外部RAM3000H和4000H中的内容。 3、添加将片内30H-3FH单元的内容复制片外片外1030H~103FH中的源程序,编译运行,观察比较30-3FH单元中的内容和片外1030H-103FH中的内容。 4、添加将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中的源程序,编译运行,观察结果。 5、添加求内部RAM 30H—37H单元中8个无符号数的算术和的源程序,8个无符号数设定为25H,36H,4AH,65H,7FH,82H,9BH,1DH,观察39H,38H中的数字是否分别为02H,C3H。 四、实验结果 1.步骤1的结果为8000H-80FFH的内容都为1. 2.步骤2的结果为3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同。

北京邮电大学微机原理硬件实验报告

北京邮电大学微机原理硬件实验报告

实验报告一:I/0地址译码和简单并行接口 ——实验一&实验二 一、实验目的 掌握I/O地址译码电路的工作原理;掌握简单并行接口的工作原理及使用方法。 二、实验原理及内容 a) I/0地址译码 1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数 字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~ 287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。 利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔经过软件延时实现。 2、接线: Y4/IO地址接 CLK/D触发器

Y5/IO地址接 CD/D触发器 D/D触发器接 SD/D触发器接 +5V Q/D触发器接L7(LED灯)或逻辑笔 b) 简单并行接口 1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通 用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器, 8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电 路L0~L7。 2、编程从键盘输入一个字符或数字,将其ASCⅡ码经过这 个输出接口输出,根据8个发光二极管发光情况验证正确 性。 3、按下面图4-2-2简单并行输入接口电路图连接电路 (74LS244插通用插座,74LS32用实验台上的“或门”)。 74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关 输出K0~K7,8个数据输出端分别接数据总线D0~D7。 4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这 个ASCⅡ码,并将其对应字母在屏幕上显示出来。 5、接线:1)输出 按图4-2-1接线(图中虚线为实验所需接线,74LS32为实验 台逻辑或门) 2)输入 按图4-2-2接线(图中虚线为实验所需接线,74LS32为实 验台逻辑或门) 三、硬件连线图 1、I/O地址译码

(完整word版)微机原理与接口技术试验学习总结

微机原理与接口技术试验学习总结 本学期微机原理的实验课程即将结束,关于微机原理课程实验的心得体会颇多。 初学《微机原理》时,感觉摸不着头绪。面对着众多的术语、概念及原理性的问题不知道该如何下手。在了解课程的特点后,我发现,应该以微机的整机概念为突破口,在如何建立整体概念上下功夫。“麻雀虽小,五脏俱全”,可以通过学习一个模型机的组成和指令执行的过程,了解和熟悉计算机的结构、特点和工作过程。 《微机原理》课程有许多新名词、新专业术语。透彻理解这些名词、术语的意思,为今后深入学习打下基础。一个新的名词从首次接触到理解和应用,需要一个反复的过程。而在众多概念中,真正关键的并不是很多。比如“中断”概念,既是重点又是难点,如果不懂中断技术,就不能算是搞懂了微机原理。在学习中凡是遇到这种情况,绝对不轻易放过,要力求真正弄懂,搞懂一个重点,将使一大串概念迎刃而解。 学习过程中,我发现许多概念很相近,为了更好地掌握,将一些容易混淆的概念集中在一起进行分析,比较它们之间的异同点。比如:微机原理中,引入了计算机由五大部分组成这一概念;从中央处理器引出微处理器的定义;在引出微型计算机定义时,强调输入/输出接口的重要性;在引出微型计算机系统的定义时,强调计算机软件与计算机硬件的相辅相成的关系。微处理器是微型计算机的重要组成部分,它与微型计算机、微型计算机系统是完全不同的概念。 在微机中,最基础的语言是汇编语言。汇编语言是一个最基础最古老的计算机语言。语言总是越基础越重要,在重大的编程项目中应用最广泛。就我的个人理解,汇编是对寄存的地址以及数据单元进行最直接的修改。而在某些时候,这种方法是最有效,最可靠的。然而,事物总有两面性,有优点自然缺点也不少。其中,最重要的一点就是,汇编语言很复杂,对某个数据进行修改时,本来很简单的一个操作会用比较烦琐的语言来解决,而这些语言本身在执行和操作的过程中,占有大量的时间和成本。在一些讲求效率的场合,并不可取。 汇编语言对学习其他计算机起到一个比较、对照、参考的促进作用。学习事物总是从最简单基础的开始。那么学习高级语言也当然应当从汇编开始。学习汇编语言实际上是培养了学习计算机语言的能力和素养。个人认为,学习汇编语言对学习其他语言很有促进作用。 汇编语言在本学期微机学习中有核心地位。本学期微机原理课程内容繁多,还学习了可编程的计数/定时的8253,可编程的外围接口芯片8255A等。学的都是芯片逻辑器件,而在名字前都标有“可编程”,其核心作用不可低估。 我想微机原理课程试验不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。但是我想他也有它的独特之处,那就是让我们进入一个神奇的世界,那就是编程。对我们来说汇编真的很新奇,很有趣,也使我有更多的兴趣学习微机原理和其

四川大学微机原理实验报告..

微机原理实验报告 学院: 专业班级: 姓名 学号

实验一汇编语言编程基础 1.3汇编语言程序上机操作和调试训练 一.功能说明 运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 运用MASM﹒EXE文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。 运用LINK.EXE文件进行连接,形成*.EXE文件。 仔细阅读和体会DEBUG调试方法,掌握各种命令的使用方法。 运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。 再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。 二.程序流程图 设置被除数、商的地址指针 设置单位除法次数计数器 取被除数一位作十进制调整 作字节除法、存商 N 被除数各位已除完? Y 显示运算结果 结束 三.程序代码 修改后的程序代码如下: DATA SEGMENT A D B 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

MOV ES,AX CLD LEA SI,A LEA DI,C MOV CX,N MOV AH,0 LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C LP2: MOV DL,[DI] ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21H CODE ENDS END START 四.实验感想和收获 通过这次试验,我对微机原理上级试验环境有了初步的认识,可以较为熟练地对汇编语言进行编译,汇编及连接,同时也学会了用DEBUG调试程序,收获很大。 在这次试验中我也遇到了一些困难。在刚开始我发现自己无法打开MASM.EXE,计算机提示是由于版本不兼容。我这才想起来我的操作系统是64位的,和该软件版本不兼容。不过我并没有放弃,经过我的摸索之后,我发现用DOSBOX这个程序可以解决我的电脑运行不了该程序的问题。在解决了第一个难题后,我开始着手改正试验1.3中的语法错误和逻辑错误,但是无论我怎么修改却始终都无法通过编译,并且基本上每句话都有编译错误。根据我多年编程的经验来看,这应该是中文输入法在搞鬼,之后我耐心地把程序重新输了一遍,果然通过了编译,并且之后的连接也进行的很顺利。在用DEBUG调试时发现得出的结果也很正确。 尽管这次的实验内容非常简单,仅仅是教会我们一些基本的操作,但我却明显感觉到了汇编语言和C语言等高级语言所不同的地方。越是底层,基础的东西就越不人性化,用C语言一行代码就能实验的功能在汇编语言中可能要花上数十行。看来汇编语言的学习不是几周就能速成的,必须要有长年累月的积淀才能掌握。

微机原理实验答案汇总

1.题目:编程将(AX)=2387、(BX)=192FH、(CX)=9256中的无符号数按由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。 CODE SEGMENT ASSUME CS:CODE START: MOV AX,2387 MOV BX,192FH MOV CX,9256 CMP AX,BX JAE NEXT1 XCHG AX,BX NEXT1: CMP AX,CX JAE NEXT2 XCHG AX,CX NEXT2: CMP BX,CX JAE NEXT3 XCHG BX,CX NEXT3: MOV AH,4CH INT 21H CODE ENDS END START 2.题目:编程将(BX)=8600H、(CX)=3489H、(DX)=9235按有符号数由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。 ;CODE SEGMENT ASSUME CS:CODE START: MOV BX,8600h MOV CX,3489H MOV DX,9235 CMP BX,CX JGE NEXT1 XCHG BX,CX NEXT1: CMP BX,DX JGE NEXT2 XCHG BX,DX NEXT2: CMP CX,DX JGE NEXT3 XCHG CX,DX NEXT3:

MOV AH,4CH INT 21H CODE ENDS END START 3.题目:在数据段中定义如下数据:32,34,89H,,编程将以上数据按有符号数进行排序,并将程序和结果记录下来。 DATA SEGMENT NUM DB 32,34,89H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DAT START: MOV AX,DATA MOV DS,AX ;初始化DS LEA BX,NUM ;取有效地址到BX,以便访问要排序的数 MOV AL,[BX] CMP AL,[BX+1] JGE NEXT1 ;若第一个数大则跳转,否则将第一个与第二个数交换 XCHG AL,[BX+1] MOV [BX],AL NEXT1: CMP AL,[BX+2] JGE NEXT2;若第一个数大则跳转,否则将第一个与第三个数交换 XCHG AL,[BX+2] MOV [BX],AL NEXT2: MOV AL,[BX+1];将第二个和第三个数比较 CMP AL,[BX+2] JGE NEXT3;若第二个数大则跳转,否则将第二个与第三个数交换 XCHG AL,[BX+2] MOV [BX+1],AL NEXT3: MOV AH,4CH INT 21H CODE ENDS END START 4.题目:在数据段中定义如下数据:99,25,86,编程将以上数据按无符号数进行排序,上机调试出程序,并将程序和结果记录下来。 data segment num db 99h,25h,86h data ends code segment assume cs:code,ds:data start:mov ax,data

微机原理实验报告

微机原理与接口技术 实验指导书 班级 学号 099074 工业大学计算机学院

实验一存贮器读写实验 一、实验容 对指定地址区间的RAM(4000H~4FFH)先进行写数据55AAH,然后将其容读出再写到5000H~5FFH中。 二、实验步骤 l、将实验系统与PC机连接; 2、在PC机上启功DJ-8086k软件,实验系统进入联机状态; 3、在DJ-8086k软件环境下编辑、调试程序,将程序调试、编译通过; 4、运行程序。 5、稍后按RST键退出,用存贮器读方法检查4000H~43FFH中的容和5000~53FFH中的容应都是55AA。 三、实验程序清单 CODE SEGMENT ;RAM.ASM ASSUME CS:CODE PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 ORG 1850h START: JMP START0 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH START0: MOV AX,0H MOV DS,AX MOV BX,4000H MOV AX,55AAH MOV CX,0200H RAMW1: MOV DS:[BX],AX ADD BX,0002H LOOP RAMW1 MOV AX,4000H MOV SI,AX

MOV AX,5000H MOV DI,AX MOV CX,0400H CLD REP MOVSB call buf1 mov cx,0ffh con1: push cx call disp pop cx loop con1 call buf2 con2: call disp jmp con2 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;20H ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB OUT DX,AL MOV AL,CL MOV DX,PA OUT DX,AL PUSH CX DIS2: MOV CX,00A0H LOOP $ POP CX CMP CL,0FEH ;01H JZ LX1 INC BX ROR CL,1 ;SHR CL,1 JMP DIS1 LX1: MOV AL,0FFH MOV DX,PB OUT DX,AL RET

微机原理实验报告

微 机 原 理 实 验 报 告 班级: 指导老师:学号: 姓名:

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 图3-1

四、参考程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: MOV AL,[SI] MOV BL,[DI] ADC AL,BL

微机原理实验参考答案(航大)

《微机原理》实验参考答案 实验1 汇编基本指令及顺序程序设计实验 实验2 分支与DOS中断功能调用程序设计实验 实验3 循环结构程序设计实验 实验4 存储器扩展实验 实验5 8259应用编程实验 实验1汇编基本指令及顺序程序设计实验 一、实验目的 1、掌握汇编语言的开发环境和上机过程; 2、掌握DEBUG命令; 3、掌握顺序程序设计方法; 4、掌握寻址方式; 5、理解和掌握汇编基本指令的功能。 二、实验内容 1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。要求:用3种方法实现。 答:方法一CODE SEGMENT ASSUME CS:CODE START: MOV AX,3000H MOV BX,5000H MOV CX,AX MOV AX,BX MOV BX,CX CODE ENDS END START 方法二CODE SEGMENT ASSUME CS:CODE START: MOV AX,3000H MOV BX,5000H XCHG AX,BX CODE ENDS END START

方法三CODE SEGMENT ASSUME CS:CODE START: MOV AX,3000H MOV BX,5000H PUSH AX PUSH BX POP AX POP BX CODE ENDS END START 2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。 MOV AX,BX 寄存器寻址,将BX内容送AX MOV AX,[BX] 寄存器间接寻址,将DS:BX内存单元内容送AX MOV AX,10[BX] 寄存器相对寻址,将DS:BX+10内存单元内容送AX 在DEBUG调试模式,用A命令直接编辑相应指令并用T命令单步执行,执行后查询相应寄存器的值并用D命令查内存。 3、已知有如下程序段: MOV AX,1234H MOV CL,4 在以上程序段的基础上,分别执行以下指令: ROL AX,CL AX=2341H ROR AX,CL AX=4123H SHL AX,CL AX=2340H SHR AX,CL AX=0123H SAR AX,CL AX=0123H RCL AX,CL 带进位标志位的循环左移 RCR AX,CL 带进位标志的循环右移 4、设有以下部分程序段: TABLE DW 10H,20H,30H,40H,50H ENTRY DW 3 ┇ LEA BX,TABLE ADD BX,ENTRY MOV AX,[BX] ┇ 要求:(1)将以上程序段补充成为一个完整的汇编程序。

微机原理与接口技术实验报告

微机原理与接口技术》 上机报告 学院:机电学院指导教师:胡勇学号:631424210229 姓名:鞠其林

实验一初级程序的编写与调试实验 、实验目的 1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序. 2、深入了解数据在存储器中的存取方法, 及堆栈中数据的压入与弹出 3、掌握各种寻址方法以及简单指令的执行过程. 二、实验内容 1、设堆栈指针SP=2000H,AX=3000H,BX=5000H请, 编一程序段将AX的内容和BX 的内容进行交换. 请用堆栈作为两寄存器交换内容的中间存储单元, 用DEBUG调试程序进行汇编与调试. 程序: MOV AX,3000 MOV BX,5000 MOV SP,2000 PUSH AX PUSH BX POP AX POP BX HLT

2、设AX=0002H,编一个程序段将AX的内容乘10, 要求用移位的方法完成程序: MOV AX,0002 MOV BX,AX MOV CL,2 SHL AX,CL ADD AX,BX MOV CL,1 SHL AX,CL HLT

三、心得体会 从这个程序的编辑过程中我感受到了汇编语言的强大,很直观的就可以读懂程 序的含义,但代码比较难记,而且语法严谨,我调试的过程中犯了一点错误, 修改的次数较多,希望我以后可以不再犯同样的错误,也是因为我练的比较的 少,还很生疏,我以后一定多加练习,把汇编学好 实验二 加法及判断程序的编写与调试 、实验目的 1、熟练掌握编写汇编语言源程序的基本方法和基本框架 2、学会编写顺序结构 , 分支结构和循环结构的汇编程序

3、掌握程序中数据的产生与输入输出的方法. 二、实验内容 1、用汇编语言编写一个加法程序: 1325+9839 请用ASCII 码的形式将加数与被加数存放在数据区DATA1和DATA2中, 并将相加结果显示输出. 程序: DATA SEGMENT DATA1 DB '5','2','3','1' DATA2 DB '9','3','8','9' DATA ENDS STACK SEGMENT PARA STACK 'STACK' DB 200 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA SI,DATA1 LEA DI,DATA2 MOV CX,4 MOV AH,0 NEXT: MOV AL,[SI] ADC AL,[DI] ADC AL,AH MOV AH,0 AAA ADD AL,30H MOV [DI],AL INC DI INC SI LOOP NEXT MOV CX,5 ADD AH,30H MOV [DI],AH NEXT1:MOV DL,[DI] MOV AH,02 INT 21H DEC DI

相关文档
最新文档