xin微机原理与汇编语言程序设计

xx dw ?

inerr db 0ah,0dh,input error! try again,0ah,0dh,'$'

DATAS ENDS

STACKS SEGMENT

db 200 dup(0);此处输入堆栈段代码 STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX

next: mov dx,offser input;此处输入代码据段代码 mov ah,9 int 21h mov ah,1 int 21h cmp al,'0' jb err cmp al,'9' ja err add al,0fh mov x,al xor ebx,ebx mov bl,al

mov ax,tab[ebx*2] mov xx,ax exit: MOV AH,4CH INT 21H jmp enxt

CODES ENDS END START

4、设TAB字节存储区中存放着0—9的平方值,试编写一程序实现以下功能:从键盘上输入一个数X(0<=X<=9),试利用平方表计算它的平方值并将结果在显示器上显示出来。其显示结果格式为: 2*2=4 5*5=25

A ILEGAL DIGIT! 9*9=81

按回车键结束。

29

【预习要求】

1、仔细阅读课本及相应教材。

2、参照程序框图编制源程序,准备好多组运算数据,以供校验。

【实验步骤】

1、确定算法,画出程序流程图。 2、利用文本编辑程序,建立源文件。

3、利用汇编程序MASM对源程序汇编,形成目标文件 4、利用LINK对目标文件进行链接,形成可执行文件。

5、运行可执行文件,如果有错误,利用DEBUG软件进行调试 【思考题】

1.试分析下列程序段。 ADD AX,BX JNO L1 JNC L2

SUB AX,BX JNC L3 JNO L4

JMP SHORT L5

如果AX和BX的内容给出如下:

AX BX (1)14C6 80DC (2)B568 54B7 (3)42C8 608D (4)D023 9FD0 (5)9FD0 D023

问该程序分别在上面5种情况下执行后,程序转向哪里?请直接标注在题后。

2.执行完程序后,回答指定的问题。 MOV AX,0 MOV BX,2 MOV CX,50 LP: ADD AX,BX ADD BX,2 LOOP LP

问: (1) 该程序的功能是:

(2) 程序执行完成后,(AX)=( )。

【实验报告要求】

1、记录实验步骤和出现的现象,按照要求写出显示结果,源程序加上注释。 2、比较实验记录和理论分析的结果是否相同,如果不同找出差别并分析原因。 3、写实验报告,画出算法流程图,运行可执行文件并写出运行结果。

30

4、回答思考题问题,总结本次实验体会。

实验六 分支程序设计2(2学时)

【实验目的】

1、熟练掌握逻辑运算和转移指令 1) 逻辑运算指令

2)标号和无条件转移指令 3)比较指令和条件转移指令

2、掌握分支程序设计的原理和方法 , 重点掌握各种分支程序中形成和判断条件而产生的程序段的设计方法和技巧

【实验内容】

1、编制程序实现已知在内存中从BLOCK单元起存放有20个带符号字节数据,统计其中负数的个数并放入COUNT单元。 DATA SEGMENT

BLOCK DB –7,1,12,-90,-70,34,-1,56,45,-12 DB –3,-4,23,0,12,11,-9,-8,67,-56 CN EQU $-BLOCK COUNT DB ? DATA ENDS

调试运行时,请采用两种方法:

(1)调用DEBUG程序查看运行结果并记录每步运行结果; (2)负数的个数在屏幕上显示出来。

2、编制程序实现已知两个无符号字数据X、Y分别存放在ADRX和ADRY单元,编制程序,若X是Y的倍数,则在显示器上显示0,否则显示1。 DATA SEGMENT

ADRX DW 144 ADRY DW 12 DATA ENDS

3、试编写程序,对BUF字节存储区的3个数进行比较,并按比较结果显示如下信息:

(1) 如果3个数都不相等则显示0 (2)如果3个数中有两个相等则显示1 (3) 如果3个数都相等则显示2

(提示:自己可以在数据段中随意定义3个数据,然后比较,若第一数和第二数相等,接着比较第三数,相等则显示2,否则显示1;若第一数和第二数不相等,接着比较第三数,相等则显示1,否则显示0). DATA SEGMENT

BUF DB 50,50,50 DATA ENDS

调试程序:分别设置第1个数变化、第2个数变化、第3个数变化。

31

4、编制程序实现已知在数据段有一带符号单字节数X,判断其正负,若为负数,求其绝对值并放到Y单元。调用DEBUG程序查看运行结果并记录每步运行结果。 【预习要求】

1、仔细阅读课本及相应教材。

2、参照程序框图编制源程序,准备好多组运算数据,以供校验。

【实验步骤】

1、确定算法,画出程序流程图。 2、利用文本编辑程序,建立源文件。

3、利用汇编程序MASM对源程序汇编,形成目标文件 4、利用LINK对目标文件进行链接,形成可执行文件。

5、运行可执行文件,如果有错误,利用DEBUG软件进行调试

【思考题】

1、从键盘输入一个十六进制数码,转换成二进制数放入HEXNUM单元,在横线上填入适当的语句。

HEXNUM DB ? MOV AH, INT 21H CMP AL,39H ______ NEXT

SUB AL,________ NEXT:SUB AL,30H

MOV HEXNUM,________ HLT

2.执行完程序后,回答指定的问题。 MOV AX,200H MOV BX,500H

MOV [BX+10H],30H ADD AX,[BX+10H] LEA SI,[BX+10H] MOV BX,AX 问:程序段执行后:

SI=( ) BX=( )

【实验报告要求】

1、记录实验步骤和出现的现象,按照要求写出显示结果,源程序加上注释。 2、比较实验记录和理论分析的结果是否相同,如果不同找出差别并分析原因。 3、写实验报告,画出算法流程图,运行可执行文件并写出运行结果。 4、回答思考题问题,总结本次实验体会。

32

联系客服:779662525#qq.com(#替换为@)