微机 第一次实验

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容