微机原理与应用精炼100题-程序员宅基地

技术标签: 硬件工程  笔记  嵌入式硬件  

  1. 堆栈指针的作用是用来指示栈顶元素

  2. ‏SP做堆栈指针时,其内容必须指向堆栈栈顶

  3. 程序计数器(PC)的位数取决于机器字长

    字长:CPU中运算器一次能处理二进制数的最大位数

  4. 8位补码操作数"1001 0011"等值扩展为16位后,其机器数为1111 1111 1001 0011

    如果最高位是1(表示负数),则扩展位都填1;如果最高位是0(表示正数或零),则扩展位都填0。

  5. 具有指令流水线结构的CPU,一般情况下指令的执行时间主要取决于:主频

  6. 微处理器的字长主频ALU结构以及指令集等功能是影响其处理速度的主要因素。

  7. 微型计算机系统的主要性能指标有:字长存储容量指令系统运算速度系统配置

  8. CPU对外设进行数据传送的方式有程序方式、中断方式、DMA方式。

  9. 微处理器是由算术逻辑部件ALU控制部件寄存器内部总线等4部分组成

  10. 指令的执行由取指令、译码、执行构成

  11. 微型计算机是由微处理器存储器I/O接口系统总线等4部分组成。

  12. 微型计算机系统是在微型计算机基础上,配置系统软件外部设备组成。

  13. 8086CPU的数据总线宽度为16位,地址总线宽度为20位,I/O地址总线宽度为16位

  14. 一个单元的逻辑地址不唯一

  15. 8086CPU从存储器中预取指令,它们采用的存取原则为先进先出原则

  16. 当8086CPU从总线上撤消地址,而使总线的低16位置成高阻态时,其最高4位用来输出总线周期的状态信息

  17. 清除 CF 标志的指令为CLC

  18. 变量/标号的三个属性是段属性, 偏移属性,类型属性

  19. 80486允许有段的重叠和交叉

  20. 8086指令的操作数寻址方式分为:立即寻址寄存器寻址存储器寻址I/O端口寻址

  21. 8086指令的存储器寻址方式分为:直接寻址寄存器间寻址寄存器相对寻址基址加变址寻址相对的基址和变址寻址

  22. 不管是什么CPU,其指令系统都包含如下指令类型:算术运算指令逻辑运算指令数据传送指令

  23. 8086 的堆栈操作总是按双字进行的。

  24. 8086 CPU 复位后,寄存器中的值将进入初始态后CS=0FFFFH,IP=0000H,DS=0000H

  25. 8086、 8088CPU的复位起始工作地址是多少?怎样形成这个地址的?系统一旦被启动,如何自动进入系统程序?

    复位起始工作地址是FFFFOH,这个地址由厂家设置,系统一旦被启动在FFFFF0H处存放一条无条件转移的指令指向系统初始化程序。

  26. 执行单元(EU):从BIU中的指令队列寄存器中取得指令和数据,执行指令要求的操作。

  27. 总线接口单元(BIU):负责与存储器,I/O端口传送数据。

  28. 80X86工作在实模式下时,每个物理存储单元对应唯一的物理地址,其范围是0 ~ FFFFFH

  29. 32位微处理器有两个独立的物理空间,一个是存储空间,另一个是 I/O 空间

  30. 设BUF是变量,指令MOV AL, BUF中源操作数的寻址方式是直接寻址

  31. 指令SUB CX, [BX+2]的源操作数的寻址方式是基址寻址

  32. 实模式下,CPU要执行的下一条指令的逻辑地址分别存放在( CS:IP )寄存器中。

    实模式下,CPU要执行的下一条指令的偏移地址存放在IP 寄存器中,代码段的段基址在CS中,因此逻辑地址存放在CS:IP中。

  33. 下列存储器操作数的段超越前缀可省略的是SS:[BP]

    间址寄存器只能是BX,SI,DI ,BP,其中BP约定查找堆栈段,因此当寻址的操作数在堆栈段,并且用BP作为间址寄存器,此时该段前缀可省略。

  34. 指令MOV AX,[BX]目标操作数、源操作数的寻址方式分别是寄存器寻址,间址寻址

  35. 指令MOV AX,[BX+1234H]的寻址方式是相对的基址和变址寻址

  36. 已知CNT EQU 1223H,则以下与MOV BL,23H等效的指令是MOV BL,LOW CNT

  37. 传送数据时,占用CPU时间最长的传送方式是查询

  38. 分析问题:

    A. MOV [BX], SI

    这个指令试图将 SI 寄存器的值移动到由 BX 寄存器指定的内存地址中。在实模式下,BX 可以作为基址寄存器用于间接寻址,所以这个指令是合法的

    B. MOV [DX], SI

    这个指令试图将 SI 寄存器的值移动到由 DX 寄存器指定的内存地址中。然而,在实模式下,DX 通常不直接用作间接寻址的基址寄存器。它通常与其他寄存器(如 BX)结合使用,形成16位的偏移量,或者在某些指令中作为数据段寄存器使用。因此,这个指令在实模式下是非法的

    C. MOV [AX], SI

    这个指令试图将 SI 寄存器的值移动到由 AX 寄存器指定的内存地址中。但是,AX 是一个累加器寄存器,通常用于算术运算和I/O操作,而不是作为间接寻址的基址寄存器。因此,这个指令是非法的

    D. MOV [CX], SI

    这个指令试图将 SI 寄存器的值移动到由 CX 寄存器指定的内存地址中。CX 是一个计数器寄存器,通常用于循环操作,而不是作为间接寻址的基址寄存器。因此,这个指令也是非法的

  39. MOV SI,EBX指令,两个操作数长度不相等,指令是非法的。

  40. 在实地址模式下,设SS=2FD0H ,DS=2F34H,BP=02F6H,则指令MOV AL,[BP]源操作数的物理地址是2FFF6H

    BP寄存器间址寻址约定查找的是堆栈段,因此操作数的物理地址是SS16+BP=2FD0H16+02F6H=2FFF6H

  41. 指令MOV AX,1234H源操作数的寻址方式是立即寻址

  42. 寻址方式:

    A) MOV AX, [4000H];直接寻址
    B) MOV [BX], AX;寄存器寻址
    C) SUB AX, 2000H;立即寻址
    D) MOV AX, [SI+12H];寄存器相对寻址
    E) MOV CX, [BX];寄存器间接寻址
    F) MOV AX, [SI+BX+10H];
    
  43. 间址寻址寄存器只能是BX,BP,SI,DI

  44. 已知BP=2000H,DS=2000H,SS=1000H,则实模式下,指令MOV AX,[BP+100H]源操作数存放在物理地址为12100H的单元中。

    指令MOV AX,[BP+100]源操作数的寻址方式为基址寻址,BP约定查找的是堆栈段,因此物理地址为SS16+BP+100H=12100H*

  45. 符号指令和机器指令是一对一的关系

  46. 间址寻址寄存器只能是BX,BP,SI,DI

  47. 8086的标志寄存器FLAG中定义的状态标志有6

  48. 寄存器间接寻址方式中,操作数在内存单元中

  49. 系统总线中地址线的功能是指定主存和I/O设备接口电路的地址

  50. 若某个接口电路可以使用查询方式和CPU交换信息,则该接口电路中至少需要设置数据和状态端口

  51. 如果要控制的外部设备是发光二极管,应选用的最佳输入输出控制方式是无条件传送方式

  52. 分析

    A. IN DX,AX - 这是错误的,因为 DX 是一个目标寄存器,而 AX 在这里被用作源端口地址,这是不允许的。

    B. IN DX,AL - 这也是错误的,因为 DX 是一个16位寄存器,而 AL 是一个8位寄存器。你不能将一个8位值放入一个16位寄存器。

    C. IN AX,DX - 这是正确的。这条指令从由 DX 寄存器指定的16位端口读取一个字(16位)到 AX 寄存器。

    D. IN AX,[DX] - 这是错误的,因为x86汇编中的 IN 指令不支持使用方括号 [DX] 来指定间接端口地址。

  53. 三态缓冲器可以用作简单的输入接口

  54. 常用的I/O端口编址方式包括统一编址独立编址两种

  55. 若某数据端口的地址为90H,则由该端口向CPU输入一个数据,使用的指令是IN AL,90H

  56. 80x86系统采用8259A的中断类型码为88H,则中断输入端为$IR_0$,中断服务程序的段地址为00222H,偏移地址为00220H

    (1)由于中断类型码为88H,其低三位为000,所以中断输入端为$IR_0$ (2)中断服务程序的偏移地址和段地址分别为4n和4n+2两个字单元,而4*88H=220H

  57. 系统RAM的240H~243H单 元的内容是90H型中断的中断向量。

    n型中断的中断向量存放在系统RAM的4n-4n+3这4个单元,因此240H-243H里存放的应该是240/4 型中断的中断向量。240H /4=0010010000B=90H

  58. 若已知系统RAM的60H~63H单元的内容依次为25H,34H,96H,18H,则18H型中断服务程序所在代码段的段基址为1896H,中断服务程序入口的偏移地址为3425H

  59. 执行IRET指令,从栈顶弹出的3个字依次送入IP,CS,FR寄存器

  60. 据中断源的不同,中断可以分为硬件中断和软件中断两大类()

    根据中断源的不同,中断可以分为外部中断内部中断两大类。

  61. 实模式下,中断向量是指中断服务程序的入口地址

  62. 80x86有两个外部中断请求线:NMI(non makable interrupt)、INTR(可屏蔽中断)

  63. 8086微机系统的RAM存储单元中,从0000H:002CH开始依次存放23H,0FFH,00H和0F0H四个字节,则向量的中断号为0BH

    002CH/4=向量的中断号

  64. 1片8259A中断控制器可以管理8级中断

  65. 若已知系统RAM的20H~23H单元的内容依次为12H,34H,56H,78H,则08H型中断服务程序的入口物理地址为7B972H。

    ***20H,21H中存放的是08H中断服务程序入口的偏移地址,22H,23H中存放的是08H中断服务程序的段基址,则08H型中断服务程序的入口物理地址为7856H16+3412H=7B972H

  66. 实时时钟中断源包括报警中断和周期中断

  67. 用户中断的中断类型码是71H和0AH

  68. 非屏蔽中断和软件中断不可以被屏蔽。

  69. 软件中断,中断类型码是由指令提供

  70. 利用8254每20ms产生一次中断,若CLK为2MHZ,则工作方式和计数初值分别是方式2,40000

    $N=f_{clk}/f_{out}$

  71. PC机8254的0号计数器提供系统日时钟中断

  72. ‌若某8254的计数器的初值为20000,则该计数器的初值写入时,应设置为二进制

    8254的计数器的初值超过10000,则初值只能选择二进制

  73. 8254计数初值N与输入信号频率$f_{clk}$、输出信号频率的关系为$N=$$f_{clk}/_{fout}$

  74. 8254计数初值N与输入信号频率$f_{clk}$、输出信号频率$f_{out}$的关系为:$N=f_{clk}/f_{out}$

  75. ‏串行异步通信帧格式约定数据位及停止位分别为5~8、1~2位。

  76. 串行异步通信的RS-232C接口标准中,为发送数据而建立的一对控制信号是RTS/CTS

  77. 在Intel 8250芯片中,实现并行数据转换为串行的是发送器

  78. RS232C接口标准中逻辑电平的取值范围,规定:逻辑“1”信号,电平在–3V ~ -15V 之间;逻辑“0”信号,电平在 +3V ~ +15V 之间。

  79. 按照串行数据的时钟控制方式,串行通信可以分为串行同步通信串行异步通信

  80. ‌串行异步通信协议要求收、发双方预置的数据帧格式通信速率必须一致。

  81. 异步通信一帧数据格式中,按照发送的次序,先传送起始位

  82. 8250内部的中断中,优先级最高的是接收数据错中断

  83. 找出错误原因:

    MOV DS,1000H;立即数不能直接送给段寄存器
    MOV BUF,[BX]; (BUF 已定义为字节变量) 两个操作数不能同为内存操作数
    ‌
    MUL 100 ;乘数不能是立即数
    SAL AX,CX ;移位次数只能是立即数或CL寄存器
    
  84. 已知某数据段定义如下,则变量D6的偏移地址是( 0013H )。

    DATA SEGMENT
    D1 DB  5 DUP(0)
    ‏
    D2 DW  2 DUP(?)
    
    D3 DB  'Hello!'
    
    D4 EQU 100; 这是一个等值定义,不占用存储空间,只是一个符号常量 
    
    D5 DD  1234H
    
    D6 DB  ?
    DATA ENDS
    
  85. 已知BUF DW 'AB' ,则汇编后BUF+1单元存放的内容为41H

    双字节数的低位字节存放在低地址单元,高位字节存放在高地址单元。因此(BUF)=42H,(BUF+1)=41H

  86. 两个压缩的BCD数25与58相加,运算后的结果需要进行修正,修正后,运算结果为83H

    ****BCD码调整指令的作用是对二进制的运算结果调整成十进制结果。组合十进制数加法调整指令是对存放在AL中的由两个组合BCD码数相加的和进行修正,得到正确的组合BCD码结果。而这两个BCD码十进制的加法结果是83,因此答案为83H

  87. 将BUF内存单元的偏移地址传送到BX中,可以用MOV BX, OFFSET BUF实现,还可以用功能相同的指令[LEA](<https://www.cnblogs.com/milantgh/p/3919662.html>) BX,BUF 实现。

    (1)不能有多余的空格,例:操作码和操作数之间空格只有一位;操作数和操作数之间不能有空格,用半角逗号隔开。 (2)字符全部大写,并且为半角字符。

  88. 设AX=1234H,BX=5678H,阅读下列程序段,完成相应空格。 该程序段执行后,SP=2000H ,AX=1234H,BX=5678H ,CX=5678H,DX=1234H

    MOV SP, 2000H  ; 将栈指针SP设置为2000H地址  
    
    PUSH AX  ; 将AX寄存器的内容压入栈中  
      
    PUSH BX  ; 将BX寄存器的内容压入栈中
    
    POP CX  ; 从栈中弹出内容到CX寄存器  
    
    POP DX  ; 从栈中弹出内容到DX寄存器  
    
  89. 设DS=2000H,SS=4000H,BX=1000H,BP=1000H, (21000H)=1234H,(21002H)=5678H,(41000H)=3456H,(41002H)=789AH。写出下列三条指令执行后的结果。

    (1)MOV AX,DS:[1000H]      ; AX=1234H。源操作数的物理地址为DS*16+1000H=21000H ,因此寻址的16位操作数为1234H。
    (2)MOV AL,BYTE PTR [BX+2] ; AL=78H。源操作数的物理地址为DS*16+BX+2=21002H ,因此寻址的8位操作数为78H。
    (3)MOV AH,[BP]            ; AH=56H。源操作数的物理地址为SS*16+BP=41000H ,因此寻址的8位操作数为56H。
    
  90. 数据段定义如下则 L1=5, L2=10

    BUF DB  'NJUPT'
    L1 EQU $-BUF   ;L1 是 BUF 的长度
    ‍
    S DB 'EDUCN'
    ‍
    L2 EQU $-S;L2 是 S 的长度
    
  91. 设AX=2345H,BX=98A0H,程序段执行后,SP=0100H ,AX=2345H,BX=2345H ,BP=0FCH,CX=98A0H

    MOV SP,0100H  ;SP=0100H
    PUSH AX       ;SP=00FEH(字减2,双字减4),在这里字是16位
    PUSH BX       ;SP=00FCH
    MOV BP,SP     ;BP=SP=00FCH
    MOV BX,[BP+2] ;源操作数为堆栈段偏移地址为BP+2=00FEH单元的内容,即进栈的AX的值,因此BX=2345H
    POP CX        ;CX=栈顶单元的内容,即进栈的BX的值即98A0H,此时 ;SP=00FEH
    POP AX        ;AX=栈顶单元的内容,即进栈的AX的值即2345H,此时 ;SP=0100H
    
  92. 执行下列指令后,AX寄存器中的内容是1E00H

    TABLE DW 10,20,30,40,50;000AH,0014H,001EH……
    ‏
    ENTRY DW 3
    ‏
    MOV BX,OFFSET TABLE;获取TABLE数组的首地址并存储在BX中
    MOV SI,ENTRY
    MOV AX,[BX+SI]
    
  93. 设数据段有如下定义:请问CN的值是9(十进制结果)

    X   DB  'AB',-1      ;3字节
    Y   DW  12H,4567H    ;4字节
    Z   DB   5 DUP('A')  ;5字节
    CN  EQU  $-Y
    
  94. 设AL=74H,则指令CMP AL,47H执行后,AL的值为74H

  95. ‏在MOV AL ,[BX]指令之后,不可直接使用JZ指令判断AL中内容是否为0

    MOV指令不影响标志寄存器的状态位,因此不能直接使用JZ指令判断AL中内容是否为0

  96. ‎80x86微处理器的标志寄存器中,和串指令相关的的标志位是DF

  97. 设BX中有一个16位带符号数。若要将BX中的内容除2,指令为:SAR BX,1

    若不带符号,则SHR BX,1

  98. 要实现内存某缓冲区中查找有无关键字符’K’,应使用REPNE SCASB指令。

  99. 希望串操作指令自动将地址指针减量,则事先应把DF标志位设置为1

  100. 实地址模式下,DS由程序员赋初值的,而CS由系统赋值。

  101. 该程序段执行后,BX=6

    MOV CX, 16       ; 将计数器CX初始化为16,用于LOOP指令  
    MOV BX, 0        ; 初始化BX为0,可能用于记录某些条件满足的次数  
    MOV DX, 1        ; 初始化DX为1,用作AND操作的掩码  
      
    DON:              ; 标记循环开始的位置  
        MOV AX, 2AB0H ; 将立即数2AB0H加载到AX寄存器  
        AND AX, DX    ; 将AX与DX进行按位与操作,结果存回AX  
        JZ NEXT       ; 如果结果为0(即ZF标志被设置),跳转到NEXT标签  
        INC BX        ; 否则,BX寄存器加1  
      
    NEXT:             ; 标记跳转位置  
        SAL DX, 1     ; 将DX左移1位,相当于乘以2  
        LOOP DON      ; 循环CX次,每次循环后CX减1,直到CX为0时退出循环
  102. 下面程序段的功能是在一组数据中,找出最大数和最小数(有符号数),并分别存入MAX和MIN单元中。请在程序中各横线上填入适当的指令语句。

DATA SEGMENT USE16  
    BUF     DW   500, -600, 67, 433, -1 ; 定义字类型数组BUF,并初始化
    CN      DW   ($ - BUF) / 2 ; 计算BUF数组元素的个数($表示当前位置)
    MAX     DW   ? ; 用于存储最大值
    MIN     DW   ? ; 用于存储最小值
DATA ENDS  
  
CODE SEGMENT USE16  
    ASSUME CS:CODE, DS:DATA  
  
START: MOV AX, DATA ; 将数据段地址加载到AX寄存器  
       MOV DS, AX ; 将数据段地址设置到DS寄存器  
       MOV SI, OFFSET BUF ; 将BUF数组的地址加载到SI寄存器  
       MOV CX, CN ; 将数组元素个数加载到CX寄存器(循环计数器)  
       DEC CX ; 由于数组索引从0开始,所以CX减1  
       MOV AX, [SI] ; 加载数组的第一个元素到AX寄存器  
       MOV MAX, AX ; 假设第一个元素是最大值  
       MOV MIN, AX ; 假设第一个元素是最小值  
  
COMPA: ADD SI, 2 ; 移动SI到下一个元素(字类型占2字节)  
       MOV AX, [SI] ; 加载当前元素到AX寄存器  
       CMP AX, MAX ; 比较AX与当前最大值  
       JL NEXT ; 如果AX小于MAX,跳转到NEXT  
       MOV MAX, AX ; 否则,更新MAX为当前AX的值  
  
NEXT:  CMP AX, MIN ; 比较AX与当前最小值  
       JG LOP ; 如果AX大于MIN,跳转到LOP  
       MOV MIN, AX ; 否则,更新MIN为当前AX的值  
  
LOP:   LOOP COMPA ; 循环,直到CX为0  
       MOV AH, 4CH ; 设置DOS中断号为4CH(程序结束)  
       INT 21H ; 调用DOS中断  
  
CODE ENDS  
    END START

  1. 程序段执行后,AX=4124H,BX=4124H
MOV  AX, 1234H   ; 将立即数1234H加载到AX寄存器中  
MOV  CL, 4       ; 将立即数4加载到CL寄存器中,CL通常用作循环或位移操作的计数寄存器  
ROR  AX, CL      ; 将AX寄存器中的值循环右移CL寄存器指定的位数(这里是4位)  AX=4123H
INC  AX          ; AX寄存器中的值加1  ,AX=4124
MOV  BX, 0       ; 将BX寄存器清零  
ADD  BX, AX      ; 将AX寄存器中的值加到BX寄存器中

  1. 程序段执行后,AX=2+4+6+8+10+12+14+16+18+20 =110
XOR  AX, AX          ; 将AX寄存器清零  
MOV  BX, 2           ; 将BX寄存器设置为2  
MOV  CX, 10          ; 将CX寄存器设置为10(用作循环计数器)  
  
AGA:  
    ADD  AX, BX      ; 将BX的值加到AX上  
    ADD  BX, 2       ; 将BX的值增加2  
    LOOP AGA          ; 循环回到AGA标签,直到CX为0
  1. 已知:AX=0FE66H,CF=1,执行下列指令序列后,CF=1,BL**=**C9H
MOV BL,27H
‎
ROL BL,1
‎
ROR BL,3;循环右移

  1. 数据段和附加段分别定义字符串变量STR1和STR2如下,其中,变量STR1和STR2的偏移地址都为0。执行以下程序段后,SI=5H,AL=31H
STR1  DB 'Hello1ABC'  
STR2  DB 'Hello2ABC'
  
LEA SI, STR1      ; 将STR1的地址加载到SI寄存器中  
LEA DI, STR2      ; 将STR2的地址加载到DI寄存器中  
MOV CX, 9         ; 将CX寄存器设置为9,用于循环次数  
CLD               ; 清除方向标志位DF,使得串操作指令自增SI和DI  
  
REPE CMPSB        ; 重复比较SI和DI指向的字节,直到不匹配或CX为0  
JZ STOP           ; 如果比较结果为零(即相等),跳转到STOP标签  
  
DEC SI            ; 将SI寄存器减1,指向STR1中的前一个字符  
MOV AL, [SI]      ; 将SI指向的字节值加载到AL寄存器中  
  
STOP:             ; STOP标签,表示程序执行到此处停止

  1. DOS功能调用的02H和09H都会破坏AL寄存器的值。
  2. 机器语言和汇编语言都和CPU的硬件结构紧密相关,高级语言不依赖于特定计算机的结构和指令系统
  3. 汇编语言属于低级语言
  4. 在汇编程序的开发过程中,链接之后所产生的文件是.COM文件和.exe文件
  5. 汇编语言源程序可以没有数据段,也可以没有堆栈段,但一定要有代码段
  6. 若从键盘输入字符‘8',屏幕上显示8H
STRING DB 'ABCDEFGHIJ' ; 定义一个字符串  
  
; ... 其他代码 ...  
  
MOV AH, 01H       ; 设置功能号,准备调用DOS中断21H来从键盘读取一个字符  
INT 21H           ; 调用DOS中断,读取的字符ASCII码存放在AL寄存器中  
  
SUB AL, 30H       ; 从AL中减去'0'的ASCII码值,将数字字符转换为对应的数字值  
DEC AL            ; 将得到的数字值减1,因为字符串索引是从0开始的  
  
MOVZX SI, AL      ; 将AL中的值零扩展后移动到SI寄存器中,作为字符串的索引  
MOV BX, OFFSET STRING ; 将STRING字符串的地址放入BX寄存器  
MOV DL, [BX+SI]    ; 根据索引从STRING中取出对应的字符,存放到DL寄存器中  
  
MOV AH, 02H       ; 设置功能号,准备调用DOS中断21H来显示一个字符  
INT 21H           ; 调用DOS中断,显示DL寄存器中的字符

  1. 执行本程序后DL=屏幕上显示内容为
MOV DL, 0         ; 初始化DL寄存器为0  
MOV CX, 8         ; 设置循环计数器CX为8  
MOV BL, 100       ; 将100加载到BL寄存器中
  
AGA: MOV AL, 30H  ; 将30H(ASCII码中的'0')加载到AL寄存器中  
     SHR BL, 1     ; 将BL寄存器中的值右移1位  
     JNC NEXT      ; 如果移位操作没有产生进位,则跳转到NEXT标签  
     MOV AL, 31H   ; 否则,将31H(ASCII码中的'1')加载到AL寄存器中  
  
NEXT: RCL DL, 1    ; 将AL寄存器中的最低位旋转到DL寄存器的最高位  
     MOV AH, 0EH   ; 设置DOS视频服务的功能号,准备输出字符  
     INT 10H       ; 调用DOS中断,输出DL寄存器中的字符到屏幕  
     LOOP AGA      ; 递减CX并检查是否为0,如果不为0则跳转到AGA标签继续循环

  1. 设计基于8086 CPU的汇编语言程序,实现Z=X+Y,其中X和Y均为8位无符号数
DATA SEGMENT
    DX DB ? ; 定义一个字节变量 DX
    DY DB ? ; 定义一个字节变量 DY
    DZ DW ? ; 定义一个字变量 DZ
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE, DS:DATA ; 设置代码段和数据段的寄存器
    START: MOV AX, DATA ; 将数据段地址加载到 AX 寄存器
        MOV DX, AX ; 将 AX 寄存器的值复制到 DX 寄存器
        MOV AH, 0 ; 将 AH 寄存器的值设置为 0
        MOV AL, DX ; 将 DX 寄存器的值复制到 AL 寄存器
        MOV BL, DY ; 将 DY 寄存器的值复制到 BL 寄存器
        ADD AL, BL ; 将 AL 和 BL 寄存器的值相加,结果存储在 AL 寄存器中
        ADC AH, 0 ; 如果上一步的加法溢出,将溢出值加到 AH 寄存器中
        MOV DY, AX ; 将 AX 寄存器的值复制到 DY 寄存器
CODE ENDS
    END START


  1. ASSUME伪指令的功能是用来指示程序中各实际的段和各段寄存器之间的关系。
  2. 采用分支结构。首先判断X≥0还是X<0,如果X<0,则Y=-1;如果X≥0,则在判断X=0还是X>0,从而确定数值Y。Y的值存放在DTY中。
DATA SEGMENT
    DTX DB ?          ; 定义一个字节大小的变量DTX
    DTY DB ?          ; 定义一个字节大小的变量DTY
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA   ; 将数据段地址加载到AX寄存器
       MOV DS, AX     ; 将AX寄存器的值传递给DS寄存器,使DS指向数据段
       MOV AL, DTX    ; 将DTX的值加载到AL寄存器
       CMP AL, 0      ; 比较AL寄存器的值与0
       JGE BGE        ; 如果AL >= 0,则跳转到BGE标签
       MOV AL, 0FFH   ; 如果AL < 0,将0FFH(-1)加载到AL寄存器
       JMP EQ1        ; 无条件跳转到EQ1标签
BGE:  JZ EQ1         ; 如果AL = 0,则跳转到EQ1标签
       MOV AL, 1      ; 如果AL > 0,将1加载到AL寄存器
EQ1:  MOV DTY, AL    ; 将AL寄存器的值存储到DTY变量中
       MOV AX, 4C00H  ; 将4C00H加载到AX寄存器,表示程序正常结束
       INT 21H        ; 调用DOS中断21H,结束程序
CODE ENDS
END START

  1. DOS的1号功能调用是键入字符,且有回显。即AH=01H
  2. 串行通讯分为同步和异步通讯,其中数据传输率高的是同步通讯,这是因为在该方式下,信息的比例较小。
  3. DAC 0803的工作方式:直通方式、单缓冲工作方式、双缓冲工作方式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_58526902/article/details/137117507

智能推荐

WCE Windows hash抓取工具 教程_wce.exe -s aaa:win-9r7tfgsiqkf:0000000000000000000-程序员宅基地

文章浏览阅读6.9k次。WCE 下载地址:链接:https://share.weiyun.com/5MqXW47 密码:bdpqku工具界面_wce.exe -s aaa:win-9r7tfgsiqkf:00000000000000000000000000000000:a658974b892e

各种“网络地球仪”-程序员宅基地

文章浏览阅读4.5k次。Weather Globe(Mackiev)Google Earth(Google)Virtual Earth(Microsoft)World Wind(NASA)Skyline Globe(Skylinesoft)ArcGISExplorer(ESRI)国内LTEarth(灵图)、GeoGlobe(吉奥)、EV-Globe(国遥新天地) 软件名称: 3D Weather Globe(http:/_网络地球仪

程序员的办公桌上,都出现过哪些神奇的玩意儿 ~_程序员展示刀,产品经理展示枪-程序员宅基地

文章浏览阅读1.9w次,点赞113次,收藏57次。我要买这些东西,然后震惊整个办公室_程序员展示刀,产品经理展示枪

霍尔信号、编码器信号与电机转向-程序员宅基地

文章浏览阅读1.6w次,点赞7次,收藏63次。霍尔信号、编码器信号与电机转向从电机出轴方向看去,电机轴逆时针转动,霍尔信号的序列为编码器信号的序列为将霍尔信号按照H3 H2 H1的顺序组成三位二进制数,则霍尔信号翻译成状态为以120°放置霍尔为例如不给电机加电,使用示波器测量三个霍尔信号和电机三相反电动势,按照上面所说的方向用手转动电机得到下图① H1的上升沿对应电机q轴与H1位置电角度夹角为0°,..._霍尔信号

个人微信淘宝客返利机器人搭建教程_怎么自己制作返利机器人-程序员宅基地

文章浏览阅读7.1k次,点赞5次,收藏36次。个人微信淘宝客返利机器人搭建一篇教程全搞定天猫淘宝有优惠券和返利,仅天猫淘宝每年返利几十亿,你知道么?技巧分享:在天猫淘宝京东拼多多上挑选好产品后,按住标题文字后“复制链接”,把复制的淘口令或链接发给机器人,复制机器人返回优惠券口令或链接,再打开天猫或淘宝就能领取优惠券啦下面教你如何搭建一个类似阿可查券返利机器人搭建查券返利机器人前提条件1、注册微信公众号(订阅号、服务号皆可)2、开通阿里妈妈、京东联盟、拼多多联盟一、注册微信公众号https://mp.weixin.qq.com/cgi-b_怎么自己制作返利机器人

【团队技术知识分享 一】技术分享规范指南-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏5次。技术分享时应秉持的基本原则:应有团队和个人、奉献者(统筹人)的概念,同时匹配团队激励、个人激励和最佳奉献者激励;团队应该打开工作内容边界,成员应该来自各内容方向;评分标准不应该过于模糊,否则没有意义,应由客观的基础分值以及分团队的主观综合结论得出。应有心愿单激励机制,促进大家共同聚焦到感兴趣的事情上;选题应有规范和框架,具体到某个小类,这样收获才有目标性,发布分享主题时大家才能快速判断是否是自己感兴趣的;流程和分享的模版应该有固定范式,避免随意的格式导致随意的内容,评分也应该部分参考于此;参会原则,应有_技术分享

随便推点

O2OA开源企业办公开发平台:使用Vue-CLI开发O2应用_vue2 oa-程序员宅基地

文章浏览阅读1k次。在模板中,我们使用了标签,将由o2-view组件负责渲染,给o2-view传入了两个参数:app="内容管理数据"和name="所有信息",我们将在o2-view组件中使用这两个参数,用于展现“内容管理数据”这个数据应用下的“所有信息”视图。在o2-view组件中,我们主要做的事是,在vue组件挂载后,将o2的视图组件,再挂载到o2-view组件的根Dom对象。当然,这里我们要在我们的O2服务器上创建好数据应用和视图,对应本例中,就是“内容管理数据”应用下的“所有信息”视图。..._vue2 oa

[Lua]table使用随笔-程序员宅基地

文章浏览阅读222次。table是lua中非常重要的一种类型,有必要对其多了解一些。

JAVA反射机制原理及应用和类加载详解-程序员宅基地

文章浏览阅读549次,点赞30次,收藏9次。我们前面学习都有一个概念,被private封装的资源只能类内部访问,外部是不行的,但这个规定被反射赤裸裸的打破了。反射就像一面镜子,它可以清楚看到类的完整结构信息,可以在运行时动态获取类的信息,创建对象以及调用对象的属性和方法。

Linux-LVM与磁盘配额-程序员宅基地

文章浏览阅读1.1k次,点赞35次,收藏12次。Logical Volume Manager,逻辑卷管理能够在保持现有数据不变的情况下动态调整磁盘容量,从而提高磁盘管理的灵活性/boot分区用于存放引导文件,不能基于LVM创建PV(物理卷):基于硬盘或分区设备创建而来,生成N多个PE,PE默认大小4M物理卷是LVM机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录 LVM 的属性,并把存储空间分割成默认大小为 4MB 的基本单元(PE),从而构成物理卷。

车充产品UL2089安规测试项目介绍-程序员宅基地

文章浏览阅读379次,点赞7次,收藏10次。4、Dielecteic voltage-withstand test 介电耐压试验。1、Maximum output voltage test 输出电压试验。6、Resistance to crushing test 抗压碎试验。8、Push-back relief test 阻力缓解试验。7、Strain relief test 应变消除试验。2、Power input test 功率输入试验。3、Temperature test 高低温试验。5、Abnormal test 故障试验。

IMX6ULL系统移植篇-系统烧写原理说明_正点原子 imx6ull nand 烧录-程序员宅基地

文章浏览阅读535次。镜像烧写说明_正点原子 imx6ull nand 烧录