欢迎光临散文网 会员登陆 & 注册

aaa

2023-06-15 11:07 作者:aaaaaaadddss  | 我要投稿

(1) 现有程序段如下:

MOV     AL,0

MOV     BL,1

MOV     CX,10

L: ADD  AL,BL

INC  BL

LOOP L

请回答:该程序段完成的功能是什么?执行完后AL的值是多少?

这段汇编代码的作用是将寄存器 AL 的初始值设置为 0,寄存器 BL 的初始值设置为 1,然后将 BL 的值加到 AL 上,并且每次循环结束 BL 的值加 1,循环执行 10 次。最终 AL 的值将是 1 + 2 + 3 + ... + 10,即 55。


(2)现有程序段如下:

  MOV  BL,AL

  MOV  CL,4

  SHR  BL,CL

  MOV  A,BL

  AND  AL,0FH

  MOV  B,AL

请回答:该程序段完成的功能是什么?如果AL的初值为56H,则A和B的值分别是多少?

 

该程序段完成的功能是将AL寄存器中的数值分为两部分,高4位移动到BL寄存器中,低4位保留在AL寄存器中,然后分别将BL和AL的值存入A和B寄存器中。

如果AL的初值为56H,那么经过程序段的处理后,A寄存器中的值为5H,B寄存器中的值为6H。

(3)阅读以下程序:

data_seg segment

num dw 10

a dw 12,14,9,10,3,81,10,4,88,66

data_seg ends

code_seg segment

assume cs:code_seg , ds:data_seg

main proc far

start: mov ax , data_seg

      mov ds , ax

     mov cx , num

      dec cx

loop1: mov dx , cx

      mov bx , 0

loop2: mov ax ,a[bx]

      cmp ax,a[bx+2]

      jge continue

     xchg ax,a[bx+2]

      mov a[bx],ax

continue: add bx ,2

      loop loop2

      mov cx ,dx

      loop loop1

mov ax ,4c00h

      int 21h

main endp

code_seg ends

end start

请回答:该程序段完成的功能是什么?程序执行完后数组a的值是什么?

 

该程序段完成了对数组a进行冒泡排序的功能。程序执行完后,数组a的值为{3, 4, 9, 10, 10, 12, 14, 66, 81, 88}。

(1)什么是汇编语言?汇编语言与高级语言相比有什么优缺点?

 

汇编语言是一种低级语言,它直接使用计算机CPU指令进行编程。汇编语言的代码是由一系列符号、助记符和地址表示的,而这些符号和助记符都与CPU指令一一对应。汇编语言可以让程序员直接控制计算机底层硬件,提高程序的运行效率和执行速度。

与高级语言相比,汇编语言的优点主要有:

1. 直接操作硬件

2. 执行速度快

3. 空间效率高

4. 可以访问机器的底层功能

缺点则主要有:

1. 难以维护

2. 编写周期短

3. 可读性低

(2)请简要描述汇编语言程序的开发过程。

1.根据任务需求设计算法,绘制流程图;

2.编写源程序;

3.汇编源文件生成目标文件;

4.连接目标文件生成可执行文件。

(3)子程序的参数传递有哪几种方式?请简单描述每种传递方式的特点。

一、是利用累加器或寄存器,

二、是利用存储器,

三、是利用堆栈;

当相互传递的数据较少时,采用寄存器传递方式可以获得较快的传递速度;

当相互传递的数据较多时,宜采用存储器或堆栈方式传递;

如果是子程序嵌套时,最好是采用堆栈方式。

 

(4)什么叫宏汇编?宏汇编技术与子程序技术相比有哪些优缺点?

宏汇编是一种基于汇编语言的高级语言,它允许程序员使用宏指令来定义常用的代码段,并在需要时使用这些宏指令来生成汇编代码。宏汇编可以大大简化程序的编写,提高代码重用性和可维护性。

相比之下,子程序技术是一种基于函数的编程技术,通过将代码分解成多个函数模块来实现可重用性和可维护性。与宏汇编相比,子程序技术更加通用化和面向对象化。

宏汇编的优点包括:

1. 更高的可读性和可维护性

2. 更高的代码重用性

3. 更高的可移植性

宏汇编的缺点包括:

1. 可能会导致代码膨胀

2. 对于复杂的程序,可能会造成可读性降低

3. 不易于编写和调试


(5)CPU处理中断的过程包括哪些处理步骤?

中断请求、中断响应、中断服务和中断返回

 

  计算编程题(小题,共15分)

(1)设 DS=2000H, BX=0100H, SI=0002H, (20100H)=12H, (20101H)=34H,(20102H)= 56H, (20103H)= 78H, (21200H)= 2AH, (21201H)= 4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器中的内容是多少(写出计算过程)?(本题6分)

  1)MOV   AX,1200H

     AX=1200H

 

 

 

 

 

2)MOV   AX,[BX+1100H]

   20000H+1200H=21200H,

       AX=4C2AH

 

 

 

 

 

3)MOV   AX,[BX+SI]

       20000H+0100H+0002H=20102H

        AX=7856H

(2)设字符串的段地址、偏移地址和长度已经分别存于DS、SI和CX中,要统计其中字符“P”的个数,并存于DL中。试把空白处填上适当的指令(每一空白只填一条指令,本题4分)

MOV AL,‘P’

MOV DL,0

NEXT:CMP AL,[SI]

   JNZ/JNE CONT                 

INC DL

CONT:INC SI

    LOOPNEXT                

 

(3)编写一段程序,实现将ARRAY数组中的50个数求和,并将和存入字变量S中。(本题5分)

assume cs:code, ds:data

data segment

    ARRAY db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

                db 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37

                db 38,39,40,41,42,43,44,45,46,47,48,49,50

    COUNT db $-ARRAY

    S   dw ?

data ends

code segment

    start:

                    mov ax, data

                    mov ds, ax

                    mov di, offset ARRAY

                    mov cl, COUNT

                    sub ax,ax

    lp:         add al, byte ptr [di];

                    jnc done

                    inc ah

    done:           inc di

                    loop lp

                                                                                                                                                                                                                                                                                                                                                                                                              

                    mov S, ax

                    mov ax, 4c00h

                    int 21h

code ends

end start

1.7 下列各数均为用十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的数或字符的ASCII码时,它们所表示的十进制数及字符是什么?

(1) 4F (2) 2B (3) 73 (4) 59

答:(1) 4FH表示的十进制数为 79,4FH表示的字符为O;

2.1
在80x86微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号。试问可直接由指令指定的I/O端口数。

答:可直接由指令指定的I/O端口数为256个。

2.3在IBM PC机的存储器中存放信息如右下图所示。试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。

30020H 12H
30021H 34H
30022H ABH
30023H CDH
30024H EFH
答:30022H字节单元的内容为ABH;30024H字节单元的内容为EFH。30021H字单元的内容为AB34H;30022H字单元的内容为CDABH。

3.1 给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?
(1) 立即寻址
(2) 直接寻址
(3) 使用BX的寄存器寻址
(4) 使用BX的简接寻址
(5) 使用BX的寄存器相对寻址
(6) 基址变址寻址
(7) 相对基址变址寻址
答:(1) 操作数在指令中,即立即数;
(2) EA=D=7237H;
(3) 无EA,操作数为(BX)=637DH;
(4) EA=(BX)=637DH;
(5) EA=(BX)+D=0D5B4H;
(6) EA=(BX)+(SI)=8E18H;
(7) EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此EA=004FH。

试写出执行下列指令序列后BX寄存器的内容。执行前(BX)=6D16H。
MOV CL, 7
SHR BX, CL
答:(BX)=00DAH。

4.1 指出下列指令的错误:

(1) MOV AH, BX ;寄存器类型不匹配

(2) MOV [BX], [SI] ;不能都是存储器操作数

(3) MOV AX, [SI][DI] ;[SI]和[DI]不能一起使用

(4) MOV MYDAT [BX][SI], ES:AX ;AX寄存器不能使用段超越

(5) MOV BYTE PTR [BX], 1000 ;1000超过了一个字节的范围

(6) MOV BX, OFFSET MYDAT [SI] ;MYDAT [SI]已经是偏移地址,不能再使用OFFSET

(7) MOV CS, AX ;CS不能用作目的寄存器

(8) MOV ECX, AX ;两个操作数的数据类型不同

7.1 编写一条宏指令CLRB,完成用空格符将一字符区中的字符取代的工作。字符区首地址及其长度为变元。

答:宏定义如下:

CLRB MACRO N, CFIL

MOV CX, N

CLD

MOV AL, ‘ ’ ;;取空格符的ASCII码

LEA DI, CFIL

REP STOSB

ENDM

8.3 写出指令将一个字节数据输出到端口25H。

答:指令为:OUT 25H, AL

9.1 INT 21H的键盘输入功能1和功能8有什么区别?

答:键盘输入功能1:输入字符并回显(回送显示器显示) (检测Ctrl_Break);

键盘输入功能8:输入字符但不回显(也检测Ctrl_Break)。


 





aaa的评论 (共 条)

分享到微博请遵守国家法律