计算机组成原理编程题复习题

1、编程题: VARY中有一组8位的符号数,编程统计其中 正数、负数、零的个数,分别存 VM、VN、VK变量中。

[试题解析] 分析:设定此数组的元素匀为字节数据,则数组VARY中的数据个数用CNT EQU $-VARY求出,则循环次数为CNT次。在程序中,要将CNT的值送入CX中。将数组VARY中元素挨个与0比较,利用状态标志寄存器中的ZF位求出零的个数,利用SF位求出正、负数的个数。

具体程序:

stack segment para  stack

   dw  20H dup(0)

stack ends

data segment

   vary  db 23h,78h,56h,0abh,00h,0cdh,59h,14h,98h,0efh,00h,0c0h

cnt equ $-vary

vm  db ?

vn  db ?

vk db ?

data ends

code segment

   assume cs:code,ds:data,ss:stack

start: mov ax,data

mov ds,ax

mov bx,0

mov dl,0

lea si,vary

mov cx,cnt

lop1:

cmp byte ptr[si],0

je zero

js lop2

inc bh

jmp  next

lop2:

inc bl

jmp next

    zero:

           inc dl

    next:

           inc si

loop lop1

mov vm,bh

mov vn,bl

mov vk,dl

mov ah,4ch

int 21h

code ends

end start

 

2、编程题: 判断方程AX2+BX+C=0是否有实根。若有实根,则将字节变量TAG1,否则置0。假设ABC均为字节变量,数据范围为-128~127[试题解析] 分析:二元一次方程有根的条件是B2-4*A*C>=0。依据题意,先计算出B2和4*A*C,然后比较两者大小,根据比较结果给TAG赋不同的值。

 计算机组成原理编程题复习题_第1张图片

 

3、编程题: 设在数据段中定义有三个变量X,Y,Z,其中X的值为8Y的值为9,请利用算术移位指令编写程序,计算出下式的值(假设乘积的结果只有低16位有效)。

[试题解析] (1)移位运算中,左移一位相当于乘2操作,右移一位相当于除2操作; (2)算术移位适合于有符号数的运算,逻辑移位适用于无符号数的运算。

 计算机组成原理编程题复习题_第2张图片

 

4、编程题:编程实现: S=1+2+3+……+100  ,要求计算后的结果存放在变量S里。

[试题解析] 循环控制可以分为:计数循环和条件循环。作为计数循环,一般是指循环次数是已知的情况,在程序设计的的循环时,先应将循环次数送入计数器CX中进行计数,在循环体中使用LOOP等循环指令。当然,也可以通过其他方式来进行,如cx←cx-1,jnz 等结合实现。

 计算机组成原理编程题复习题_第3张图片

 

5、编程题:已知有两个双字长度的数DATA1DATA2,要求用8086汇编语言编程实现两数相加,并将结果存放在result中,采用高地址优先存储结果(如1234H5678H表示56781234H)。程序的数据段部分已给出,要求补充完整程序,实现上述要求的功能。

 计算机组成原理编程题复习题_第4张图片

[试题解析] 首先进行题目分析: (1)如何存放多精度数? 多精度数的存放有两种方式,高地址优先(如1234H,5678H表示56781234H)和低地址优先(如1234H,5678H表示12345678H),具体的存放方式由用户根据自己的习惯选择。在这里虑我们使用了高地址优先的存储方式。 (2)分析程序设计 由于汇编语言的ADD,ADC,SUB,SBB指令都不支持两个操作数都是存储器操作数的情况,因此将一个操作数的低字放到寄存器AX中,高字放到寄存器DX中分别完成高字部分的加法,高字部分的带进位加法。

 

你可能感兴趣的:(计算机组成原理编程题复习题)