张三在工作中需用8086汇编语言编程,且经常需进行三个变量x, y及z的如下运算:
为此张三决定将该三变量的运算操作写成子程序,以便随时调用。不过张三不想自己独立编写该8086汇编子程序,而是采用如下方式获得该8086汇编子程序**:
编写如下c语言程序:
注意: 整理过程主要包括调整变量x, y及z为16位数据长度, 而前述c源程序定义它们均为int类型(在目前大部分机器上该类型为32位);
上述mulsub子程序少写了一条8086汇编指令, 即注释为(#)处的指令(注: 该指令为一条非数据传送类指令).
作业要求:1.阅读前述整理出的进行运算的mulsub子程序,回答下述问题:
1)该子程序的入口参数(即变量x, y及z)是通过堆栈传递的,试问: 变量z的值在子程序中是如何获得的(通过那条指令)?
答:mov cx, [bp+8]
2)该子程序的出口参数是什么(即运算结果是如何传递出的)?
答:通过寄存器dx、ax传出, dx为高16位,ax为低16位。
3)注释为(#)处所缺写的指令应该是什么?
答:sbb dx,0
2.编写出完整的进行运算的8086汇编语言源程序。 要求如下:
a)变量x, y及z的长度均为16位,它们须在数据段内偏移地址为100h开始的地方连续存放。
b)必须调用前述的mulsub子程序来进行的运算, 运算结果应放在数据段内偏移地址为200h的地方。
c)子程序mulsub应在**段偏移地址为1000h开始的地方存放;
d)主程序(包括程序开始的第一条执行的指令)应从**段偏移地址为2000h开始的地方存放。
e)程序开始执行的第一条指令应设置堆栈指针sp, 其值应设为:
0ff00h + 你所在班级的最后两位数字 + 你在该班内的班内序号)*2
例如: 21班内序号为17的同学应设置sp = 0ff00h + 21+17)*2 = 0ff4ch
f)程序执行完后能返回dos,并要求通过执行程序段前缀开始处的int 20h来实现(不允许使用int 21h).
通常乘法指令执行的时间很长,假设在张三的项目中,如下变量的取值情况经常出现: x=0或y=0, 以及z=0 (注意在此种情况下, 运算= 0). 试在前述mulsub子程序里,增加**判断此种情况,即:
若出现x=0或y=0 以及z=0的情况,则该子程序直接返回运算结果为0,以避免执行乘法运算指令。 试给出具有此判断功能的完整子程序。
当x=4,y=5,z=2时,运行debug的结果如下图,可见此时dx是0000h,ax为0012h,即18d,结果正确:
3. 通常乘法指令执行的时间很长,假设在张三的项目中,如下变量的取值情况经常出现: x=0或y=0,以及z=0 (注意在此种情况下,运算=0)。
试在前述mulsub子程序里,增加**判断此种情况,即:若出现x=0或y=0 以及z=0的情况,则该子程序直接返回运算结果为0,以避免执行乘法运算指令。试给出具有此判断功能的完整子程序。
当x=4,y=5,z=2时:结果为18d
当x=0,y=5,z=0时:结果为0
微机原理大作业
一 1.程序。stack segment stack db 256 dup top label word stack ends data segment table dw g1,g2,g3,g4,g5 string1 db 1.change small letters into capital le...
微机原理大作业
大作业2 8086微机系统设计,具体要求如下 工作在最小方式。2 工作时钟频率为 5mhz。3 系统地址总线形成用74ls373。系统数据总线形成用74ls245。4 外部扩充设计16kb程序存储器,芯片选用intel2764,首地址从fc000h开始 外部扩充设计16kb数据存储器,芯片选用int...
西电微机原理大作业
科目 微机原理与系统设计 授课老师 李明 何学辉 学院 电子工程学院 专业 电子信息工程 学生姓名。学号。基于8086最小方式系统总线完成电路设计及编程 1 扩展16k字节的rom存储器,起始地址为 0x10000 intel 2764的存储容量为8kb,因此用两片intel 2764构成连续的ra...