专业:姓名。班级。
学号: 2012210038
班内序号。目录。
实验一分支、循环程序设计 2
1. 实验目的 2
2. 实验要求 2
3. 预习题 2
4. 选作题 2
5. 实验流程 3
6. 实验结果及分析 3
i. 源** 3
ii. 执行结果 6
iii. 结果分析 6
7. 实验总结 6
实验二**转换程序设计 7
1. 实验目的 7
2. 实验要求 7
3. 预习题 7
4. 实验流程 7
5. 实验结果及分析 9
i. 源** 9
ii. 执行结果 14
iii. 结果分析 14
6. 实验总结 14
实验三子程序设计 15
1. 实验目的 15
2. 实验要求 15
3. 预习题 15
4. 实验流程 16
5. 实验结果及分析 17
i. 源** 17
ii. 执行结果 28
iii. 结果分析 28
6. 实验总结 29
实验四中断程序设计 30
1. 实验目的 30
2. 实验要求 30
3. 预习题 30
4. 实验流程 31
5. 实验结果及分析 32
i. 源** 32
ii. 执行结果 39
iii. 结果分析 39
6. 实验总结 39
i. 开始独立进行汇编语言程序设计;
ii. 掌握基本分支,循环程序设计;
iii. 掌握最简单的 dos 功能调用。
i. 安排一个数据区(数据段),内存有若干个正数,负数和零。每类数的个数都不超过 9.
ii. 编写一个程序统计数据区中正数,负数和零的个数。
iii. 将统计结果在屏幕上显示。
i. 十进制数 0 --9 所对应的 ascii 码是什么? 如何将十进制数 0 --9 在屏幕上显示出来?
答:0~9所对应的ascii码为30h~39h。把0~9分别加上30h,然后调用dos中断21h功能为显示字符或者字符串的功能号(02h或09h)即可在屏幕上显示出来。
ii. 如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?
答:a) 使用cmp指令,将待检测数和0比较,然后通过判断标志寄存器中的zf、sf进行判定。
b) 使用test指令,判定符号,如果符号数为1,则为负数,如果符号位为0,则为正数。再将待检测数和零比较,如果待检测数不是零,则为正数。
统计出正奇数,正偶数,负奇数,负偶数以及零的个数。
答:详情请参考源**及执行结果。
data segment
number dw -3,115,0,27,73,0,14,-34,-21待比较的数,3个负数,2个0,4个正数。
;2个负奇数,3个正奇数,1个负偶数,1个正偶数。
count equ ($number)/2用于循环计数,由于dw为2个字节,所有除以2
result db 0dh,0ah,'nagetive count: '0
db 0dh,0ah,'zero count: '0
db 0dh,0ah,'positive count: '0
evennum db 0dh,0ah,'nagetive even count: '0
db 0dh,0ah,'positive even count: '0
oddnum db 0dh,0ah,'nagetive odd count: '0
db 0dh,0ah,'positive odd count: '0
db 0dh,0ah结果显示格式。
data ends
stack segment 'stack'
db 100h dup(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
判断数值子程序
子程序功能:判断数值为正数、负数或0,并计算其个数
入口参数:ax
出口参数:result
compare proc far
cmp ax,0
jl nagetive小于0转移。
jz zero等于0转移。
jg positive大于0转移。
nagetive:
add [result+18],1
test ax,1
jz noddcount判断最低位是否为0,若为0,则为偶数。
若为1,则为奇数。
nevencount:
add [evennum+23],1
retnoddcount:
add [oddnum+22],1
retzero:
add [result+33],1
retpositive:
add [result+52],1
test ax,1
jz poddcount
pevencount:
add [evennum+47],1
retpoddcount:
add [oddnum+45],1
retret
compare endp
主程序。start:
mov ax,data
mov ds,ax
mov si,0
mov cx,count
; 根据cx的数值循环判断所有的数的大小。
again:
mov ax,[number+si]
call compare调用判断数值子程序。
add si,2数是dw类型,每次需要两个字节。
loop again
add [result+18],30h加30h变成字符型对应的数字。
add [result+33],30h
add [result+52],30h
add [evennum+23],30h
add [evennum+47],30h
add [oddnum+22],30h
add [oddnum+45],30h
结果显示到屏幕。
mov dx,offset result
mov ah,9h
int 21h
mov ah,4ch返回到dos
int 21h
code ends
end start
数据区(数据段)内存放的数值为-3,115,0,27,73,0,14,-34,-21。运行结果显示,负数3个,零2个,正数4个,负奇数2个,正奇数3个,负偶数1个,正偶数1个。统计结果正确。
本实验难度不大,主要在于学习分支和循环结构,画好流程图其实就相当于做完了一大半了。**的关键在于负数、正数、奇偶数和零的判断方法。本程序通过带符号数的条件转移指令jz,js,jns分别判断是否为0,负数和正数,然后进入其对应的处理指令地址处处理。
在负数和正数的处理过程中,本程序通过判断最低位是否为0来判断是否为偶数,采用了test指令来进行判断。在显示的时候,由于每个数最多9个,可以直接加上30h变成ascii码显示。
本次实验中遇到的问题主要是程序的执行过程问题以及子程序过程的编写问题。子程序类似于c语言中的函数,如果在其内调用了通用寄存器,则需要将通用寄存器的内容先推入堆栈中,防止与主程序发生混乱。由于本实验所需通用寄存器少,子程序并未干扰到主程序的寄存器,所以不用使用栈。
通过本次实验,我收获了许多,对底层有了进一步的了解。
i. 掌握几种最基本的**转换方法;
ii. 运用子程序进行程序设计。
i. 从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来。
ii. 两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明。
iii. 对输入要有检错措施,以防止非法字符输入,并有适当的提示。
iv. 将整个程序分解为若干模块,分别用子程序实现。在报告中要给出模块层次图。
v. 如何将输入的两个字符(0 --9)变为十进制或二进制数?
答:将输入的两个字符各减去30h即成为十进制数。低地址的十进制数乘以10+高地址的十进制数即成为了所输入的十进制数。
vi. 如何将选出的最小值(二进制或十进制)变为 ascii 码再进行显示?
答:将最小值用div指令取出十位和个位后,然后再各自加上30h即可变为ascii码。
vii. 你觉得采用二进制运算还是十进制运算更适合于这个实验?
答:我觉得采用十进制运算更适合于这个实验。
a. 主程序。
b. 输入处理子程序。
c.**转换子程序。
d.比较子程序。
微机原理试题
中南大学考试试卷。2012 2013学年上学期时间110分钟 2013年1月10日。微型计算机原理与接 术课程48学时3学分考试形式 闭卷 专业年级 自动化 电气09级总分100分,占总评成绩70 注 此页不作答题纸,请将答案写在答题纸上。一 填空题 本题20分,每空1分 cpu对i o端口采用单独...
微机原理复习
微机原理复习提纲。第1章微机基础。1 了解计算机的发展 微机的发展。2 计算机中所有的信息都是以二进制数的形式存储的。3 熟练掌握常用的进位计数制及相互转换。4 计算机中常用的编码 bcd码 组合型bcd码 非组合型bcd码 和ascii码。1 bcd码 二进制编码的十进制数。组合 bcd码用4位二...
微机原理试题
微机原理考试试题纸 a卷 课程名称微机原理与接 术专业班级。题号一二三四五六七 十总分题分。备注 学生不得在试题纸上答题 含填空题 选择题等客观题 一 选择题 每题2分,共20分 微处理器的存储器寻址空间为 a 64kb b 1mb c 4gb d 64tb 2 串行接口8251a有 端口地址。a ...