如何打印#1(和)指令和移位指令

时间:2015-02-20 17:45:28

标签: assembly x86

编写将执行以下操作的汇编程序:

  1. 01011011B和11000111B
  2. 10110011B或10111101B
  3. 01101001B xor 10101101B
  4. 不是10011001B
  5. 在结果之前的单独行中,将每个操作的结果显示为二进制数字的ASCII字符串,并带有相应的消息或标题。

    提示:使用SHL隔离每个位并跳转进位 提示:使用DOS 21h中断服务,功能2为数字。

    有人可以解释一下需要做什么吗?我很陌生,无法做任何事情。如果我能看到第一个,我相信我可以让其他人继续下去,我希望。我只是不确定输出应该如何。这是我到目前为止所做的,我相信我已经离开了。谢谢,我非常感谢你的帮助。

        .stack 100h
    
        .model small
    
        .386
    
        .data
    
    
        .code
    

    主要:

     MOV AX, @DATA                ; initialize DS
     MOV DS, AX
    
    
        mov al,01011011b                     
        mov cl,11000111b
        and ah, cl
        shl al, cl
        int 21h
    
     MOV AH, 2                    ; print the processed value of AL
     MOV DL, BL
     INT 21H
    
     MOV AH, 4CH                  ; return control to DOS
     INT 21H
    
     end main
    

1 个答案:

答案 0 :(得分:1)

这里解释了在不编写程序的情况下需要做什么。请注意,编程最初是关于组织您对问题的想法。您被要求执行某些操作,并提供显示结果的特定输出。

  
      
  1. 打印"01011011B AND 11000111B results:\n" [" ...合适   消息或标题在另一行"]

  2.   
  3. 执行01011011B AND 11000111B   在汇编

  4.   
  5. 调用子程序以打印操作结果

  6.         

    对其他操作重复上述步骤(OR,XOR,NOT)

您打印的子程序(英文版,结构不完整)将是:

  

重复8次:

     
      
  1. 将8位数的下一个高位转换为进位(使用SHL

  2.   
  3. 如果进入5

  4. 则跳转   
  5. 打印'0' [使用DOS INT 21h服务例程]

  6.   
  7. 跳至1

  8.   
  9. 打印'1' [使用DOS INT 21h服务例程]

  10.   
  11. 跳至1

  12.         

    然后打印'B',然后打印carriage return

以上输出如下:

01011011B AND 11000111B results:
01000011B
10110011B OR 10111101B results:
10111111B
01101001B XOR 10101101B results:
11000100B
NOT 10011001B results:
01100110B

如果你仔细考虑,那就不那么难了。您可以自己控制输出格式。例如,您可能希望在每个结果之后额外回车以给它一些空间。它完全取决于您,并与您的老师要求的内容保持一致。

这样做的好方法是将两个数字放在数据存储器位置而不是对它们进行硬编码。但听起来你的老师愿意接受硬编码。