第一章汇编语言语法实验(第一次实验)

目录

​编辑

1.2汇编语言程序编程练习(P4)

例1.1 显示五行Hello

思维导图

实验程序图

正确代码

代码注释

实验结果

1.3汇编语言语法实验(P8)

实验1.2:排除语法错误

实验程序图

正确代码

代码注释

实验结果


1.2汇编语言程序编程练习(P4)

例1.1 显示五行Hello

思维导图

实验程序图

正确代码

;FILENAME: 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
                   

代码注释

这段代码是汇编语言的代码,用于在DOS环境下显示"HELLO"五次。下面是对代码的注释:

;FILENAME: EXA121.ASM   // 文件名

.486    // 指定使用Intel 80486或更高版本的指令集

DATA   SEGMENT   USE16    // 定义数据段
MESG  DB  'HELLO'    // 定义一个字符串变量MESG,值为'HELLO'
      DB  0,0,0   ;    // 在字符串后面添加三个空字节
      DATA  ENDS    // 数据段结束

CODE  SEGMENT USE16    // 定义代码段
      ASSUME   CS:CODE,DS:DATA    // 指定代码段和数据段的关联
BEG:  MOV  AX,DATA    // 将数据段的地址加载到AX寄存器
      MOV  DS,AX    // 将AX寄存器的值赋给DS寄存器
      MOV  ES,AX;    // 将AX寄存器的值赋给ES寄存器
      MOV  CX,5    // 将5赋值给CX寄存器

LL1:  MOV  MESG+5,0DH ;    // 将回车字符(ASCII码为0DH)赋给MESG字符串的第6个字节
      MOV  MESG+6,0AH ;    // 将换行字符(ASCII码为0AH)赋给MESG字符串的第7个字节
      MOV  MESG+7,'$' ;    // 将'$'字符赋给MESG字符串的第8个字节
      CALL DISP    // 调用名为DISP的过程
      MOV  MESG+5,0;    // 将MESG字符串的第6个字节清零
      MOV  MESG+6,0;    // 将MESG字符串的第7个字节清零
      MOV  MESG+7,0;    // 将MESG字符串的第8个字节清零
      LOOP LL1    // 循环5次,LOOP指令会自动将CX寄存器的值减1,直到CX为0时退出循环
      MOV  AH,4CH    // 将4CH赋值给AH寄存器,表示程序的退出代码为4CH
      INT  21H    // 调用21H中断,实现DOS系统功能

DISP  PROC    // 定义名为DISP的过程
      MOV  AH,9    // 将9赋值给AH寄存器,表示显示字符串的功能
      MOV  DX,OFFSET MESG    // 将MESG字符串的偏移地址赋值给DX寄存器
      INT  21H    // 调用21H中断,实现DOS系统功能
      RET    // 返回到调用DISP过程的指令处
DISP   ENDP    // DISP过程结束

CODE   ENDS    // 代码段结束
       END     BEG    // 程序结束

实验结果

1.3汇编语言语法实验(P8)

实验1.2:排除语法错误

实验程序图

正确代码

;FILENAME:EXA121.ASM
.486
DATA      SEGMENT   USE16
SUM       DB        ?,?
MESG      DB        '25+9=';
          DB        0,0,'$';
N1        DB        9
N2        DB        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,       OFFSET MESG
          INT       21H
          MOV       AH,       4CH
          INT       21H
CHANG    PROC
LAST:     CMP       BYTE PTR[BX],10
          JC        NEXT
          SUB       BYTE  PTR[BX],10
          INC       BYTE  PTR[BX+7]
          JMP       LAST
NEXT:     MOV       AH,SUM
          ADD       [BX+8],AH
          ADD       BYTE PTR[BX+7],30H
          ADD       BYTE PTR[BX+8] ,30H
          RET
CHANG    ENDP
CODE      ENDS
          END       BEG

代码注释

这段代码是汇编语言的代码,用于计算并显示25+9的结果。下面是对代码的注释:

;FILENAME: EXA121.ASM   // 文件名

.486    // 指定使用Intel 80486或更高版本的指令集

DATA   SEGMENT   USE16    // 定义数据段
SUM       DB        ?,?    // 定义SUM变量,占据两个字节的空间,用于存储计算结果
MESG      DB        '25+9='    // 定义一个字符串变量MESG,值为'25+9='
          DB        0,0,'$'    // 在字符串后面添加三个空字节
N1        DB        9    // 定义一个字节变量N1,值为9
N2        DB        25    // 定义一个字节变量N2,值为25
DATA      ENDS    // 数据段结束

CODE      SEGMENT   USE16    // 定义代码段
          ASSUME    CS:CODE,  DS:DATA    // 指定代码段和数据段的关联
BEG:      MOV       AX,       DATA    // 将数据段的地址加载到AX寄存器
          MOV       DS,       AX    // 将AX寄存器的值赋给DS寄存器
          MOV       BX,       OFFSET SUM    // 将SUM变量的偏移地址加载到BX寄存器
          MOV       AH,       N1    // 将N1变量的值加载到AH寄存器
          MOV       AL,       N2    // 将N2变量的值加载到AL寄存器
          ADD       AH,       AL    // 将AL和AH寄存器的值相加,并将结果存储在AH寄存器中
          MOV       [BX],     AH    // 将AH寄存器的值存储在SUM变量的地址中
          CALL      CHANG    // 调用名为CHANG的过程
          MOV       AH,       9    // 将9赋值给AH寄存器,表示显示字符串的功能
          MOV       DX,       OFFSET MESG    // 将MESG字符串的偏移地址赋值给DX寄存器
          INT       21H    // 调用21H中断,实现DOS系统功能
          MOV       AH,       4CH    // 将4CH赋值给AH寄存器,表示程序的退出代码为4CH
          INT       21H    // 调用21H中断,实现DOS系统功能

CHANG    PROC    // 定义名为CHANG的过程
LAST:     CMP       BYTE PTR[BX],10    // 比较SUM变量的值是否小于10
          JC        NEXT    // 如果小于10,跳转到标签NEXT处
          SUB       BYTE  PTR[BX],10    // 如果大于等于10,将SUM变量的值减去10
          INC       BYTE  PTR[BX+7]    // 将SUM变量的第8个字节加1
          JMP       LAST    // 跳转到标签LAST处
NEXT:     MOV       AH,SUM    // 将SUM的值加载到AH寄存器
          ADD       [BX+8],AH    // 将AH寄存器的值加到SUM变量的第9个字节
          ADD       BYTE PTR[BX+7],30H    // 将SUM变量的第8个字节加上ASCII码的'0'
          ADD       BYTE PTR[BX+8] ,30H    // 将SUM变量的第9个字节加上ASCII码的'0'
          RET    // 返回到调用CHANG过程的指令处
CHANG    ENDP    // CHANG过程结束

CODE      ENDS    // 代码段结束
          END       BEG    // 程序结束

实验结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高教百科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值