美文网首页
微机 第一次实验

微机 第一次实验

作者: Summer2077 | 来源:发表于2020-11-05 08:50 被阅读0次

    1.1输出5个helloword

    ;FLENAME:EXA121.ASM
    .486
    DATA       SEGMENT      USE16
    MESG       DB           'HELLO'
               DB           0,0,0    ;
    DATA       ENDS
    CODE       SEGMENT      USE16
               ASSUME       CS:CODE,DS:DATA
    BEG:       MOV          AX,DATA
               MOV          DS,AX
               MOV          ES,AX     ;
               MOV          CX,5
    LL1:       MOV          MESG+5,0DH;
               MOV          MESG+6,0AH;
               MOV          MESG+7,'$';
               CALL         DISP
               MOV          MESG+5,0;
               MOV          MESG+6,0;
               MOV          MESG+7,0;
               LOOP         LL1
               MOV          AH,4CH
               INT          21H
    DISP       PROC
               MOV          AH,9
               MOV          DX,OFFSET MESG
               INT          21H
               RET
               DISP         ENDP
               CODE         ENDS
                            END   BEG
    
    image

    1.2排除语法错误。

    下面给出的是一个意想通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。 要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的错误信息对源程序进行修改,直到没有语法错误为止。然后进行链接,并执行相应的可执行文件。正确的执行结果是在屏幕上显示:25+9=34。
    程序清单

    
    ;FILENAME:EXA131.ASM
    
    .486
    
        DATA SEGMENT USE16
    
    SUM DB ?,?,
    
    MESG DB ‘25+9=’
    
      DB 0,0
    
      N1 DB 9,F0H
    
      N2 DW 25
    
    DATA ENDS
    
    CODE SEGMENT USE16
    
      ASSUME CS:CODE,DS:DATA
    
    BEG: MOV AX,DATA
    
      MOV DS,AX
    
      MOV BX,OFFSET SUM
    
      MOV AH,N1
    
      MOV AL,N2
    
      ADD AH,AL
    
      MOV [BX],AH
    
      CALL CHANG
    
      MOV AH,9
    
      MOV DX,OFFSEG MEST
    
      INT 21H
    
      MOV AH,4CH
    
      INT 21H
    
    CHANG: PROC
    
    LAST: CMP [BX],10
    
      JC NEXT
    
      SUB [BX],10
    
      INC [BX+7]
    
      JMP LAST
    
    NEXT: ADD [BX+8],SUM
    
      ADD [BX+7],30H
    
      ADD [BX+8],30H
    
      RET
    
    CHANG: ENDP
    
    CODE ENDS
    
      END BEG
    
    

    修改后的程序

    ;FILENAME   EXA131.ASM
    .486
    DATA SEGMENT  USE16;SEGMENT关键词有缩写
    
    ;用于保存结果的二进制数
    SUM     DB  ?,?;多了一个逗号
    ;用于保存结果的二进制数
    
    ;显示的字符串
    MESG    DB  '25+9='
            DB  0,0,'$';添加结束符
    ;显示的字符串
    
    N1      DB  9,0F0H;十六进制开头需要以0开始,但是第二个没有用到,这里保留
    N2      DB  25;根据N1和16行可知该数据类型为DB
    DATA    ENDS
    
    CODE    SEGMENT USE16
    ASSUME  CS:CODE,DS:DATA
    
    BEG:
            MOV AX,DATA
            MOV DS,AX
            MOV BX,OFFSET   SUM
            ;计算N1+N2,并将结果保存到SUM处
            MOV AH,N1
            MOV AL,N2
            ADD AH,AL
            MOV [BX],AH
            ;计算N1+N2,并将结果保存到SUM处
    
            ;CHANG功能为转发字符串
            CALL CHANG
            ;CHANG功能为转发字符串
    
            ;调用DOS显示功能
            MOV AH,9
            MOV DX,OFFSET   MESG;是MESG不是MEST
            INT 21H
            ;调用DOS显示功能
    
            ;调用DOS退出功能
            MOV AH,4CH
            INT 21H
            ;调用DOS退出功能
    
    CHANG:
    LAST:
    
            ;算法:由于只有两位数,每次减10,并且显示位(十位)加1直到SUM小于10
            CMP  byte ptr [BX],10;指定内存单元大小
            JC  NEXT
            SUB  byte ptr [BX],10;指定内存单元大小
            INC byte ptr [BX+7];指定内存单元大小
            JMP LAST
            ;算法:由于只有两位数,每次减10,并且显示位(十位)加1直到SUM小于10
    
    NEXT:
            ;将个位数移到显示位(个位)上
    
            ;ADD指令不能两个操作数均为内存地址,且AH没有被使用,使用AH来中转
            MOV  AH,[BX]
            MOV  [BX+8],AH
            ;ADD指令不能两个操作数均为内存地址,且AH没有被使用,使用AH来中转
    
            ;将个位数移到显示位(个位)上
    
            ;0x30为字符'0'的ASCII码表
    
            ADD  byte ptr [BX+7],30H
            ADD byte ptr [BX+8],30H
    
            ;0x30为字符'0'的ASCII码表
            RET
    CODE    ENDS
    END     BEG
    
    image.png

    相关文章

      网友评论

          本文标题:微机 第一次实验

          本文链接:https://www.haomeiwen.com/subject/buhovktx.html