汇编语言实验课:第一次记录


前言

第一次汇编语言实验课,运行两个比较基础的小程序,再对程序中的代码进行分析。


一、运行程序

1.输出Hello World!

;完整段的Hello World程序
DATAS  SEGMENT
     STRING  DB  'Hello World!',13,10,'$'
DATAS  ENDS

CODES  SEGMENT
     ASSUME    CS:CODES,DS:DATAS
START:
     MOV  AX,DATAS
     MOV  DS,AX
     LEA  DX,STRING
     MOV  AH,9
     INT  21H
   
     MOV  AH,4CH
     INT  21H
CODES  ENDS
    END   START

2.计算两个数的和

;完整段的求3+5的和
DATAS  SEGMENT
    FIVE  DB    5
DATAS  ENDS

STACKS  SEGMENT
      DB  128 DUP (?)
STACKS  ENDS

CODES  SEGMENT
     ASSUME    CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AL,FIVE
    ADD AL,3
    ADD AL,30H
    MOV DL,AL
    MOV AH,2
    INT 21H
    
    MOV AH,4CH
    INT 21H
CODES  ENDS
    END  START


二、理解程序

1.1 DB:

 STRING  DB  'Hello World!',13,10,'$'

汇编语言中的伪操作命令,它用来定义操作数占用的字节数。
13表示回车符
10表示换行符
$是汇编下字符串的结束标志

1.2 伪指令:

DW:定义字(2字节)
PROC:定义过程
ENDP:过程结束
SEGMENT:定义段
ASSUME:建立段寄存器寻址
ENDS:段结束
END:程序结束

1.3 LEA:

LEA  DX,STRING

有效地址传送指令,是把一个内存变量的有效地址送给指定的寄存器,只用于传送地址,其指令格式如下:

LEA OPRD1,OPRD2

将源操作数给出的有效地址传送到指定16位寄存器中。
OPRD1为目的操作数,可为任意一个16位的通用寄存器
OPRD2为源操作数,可为变量名,标号或地址表达式
该指令常用来设置串操作指令所需的寄存器指针的初值。

1.4 MOV:

 MOV  AX,DATAS
 MOV  DS,AX
 LEA  DX,STRING
 MOV  AH,9

MOV是数据传送指令
格式为:

MOV OPRD1,OPRD2

功能是将一个源操作数送到目的操作数中,即OPRD1<–OPRD2,指令执行后,目的操作数的值将会被改变,而源操作数的值不变。
这类指令的源操作数和目的操作数的长度必须一致,即两者同为8位或者16位,否则就会出错。
OPRD1为目的操作数,可以是寄存器、存储器、累加器
OPRD2为源操作数,可以是寄存器、存储器、累加器和立即数

MOV的常见语法:
(1)MOV 寄存器,数据

MOV AX,8

这种方法最快
相当于:AX=8
(2)MOV 寄存器,寄存器

MOV AX,BX

次快,在寄存器中寻址
相当于:AX=BX
(3)MOV 寄存器,内存单元

MOV AX,[2]

最慢,在内存中寻址

 MOV  AH,9

此处表示的是控制字符串的输出,调用参数为DS:DX=字符串首

MOV AH,4CH
INT 21H

INT 21H是DOS的中断调用,INT是interupt中断的缩写。

注意事项:
1.双操作数指令(除特别说明)的目的操作数与源操作数必须类型一致
2.要求类型一致的两个操作数之一必须有明确的类型,否则要用PTR指明
3.双操作数指令(除特别说明)不允许两个操作数都是存储单元
4.能对专用寄存器进行操作的指令有限,功能不强,使用时要注意

1.5 ;:

:表示注释

2.1 DB:

FIVE  DB    5

此处使FIVE=5

2.2 ADD:

ADD AL,3

作用为两数相加
格式:
ADD OPRD1,OPRD2
举个例子:

ADD AX,8

表示将AX寄存器中的数加8,即AX=AX+8
再举一个例子:

ADD AX,BX

表示将AX中的数据和BX中的数据相加存入AX,即AX=AX+BX

ADD AL,30H

表示将AL转化为ASCII码,所以要加30H

2.3 MOV:

MOV AH,2

表示的是显示一个字符,调用参数为待输出字符的ASCII码,所以之前需要有:ADD AL,30H

2.4DUP

DB  128 DUP (?)

DUP是英文duplicate的缩写,是重复的意思,用来定义重复的字节、字、双字、结构等内存缓冲区。
格式:DB 重复次数 DUP(重复内容)
重复内容为“?”时表示只分配存储空间,不指定初值,即初值不确定或未赋值。如果多个存储单元的初值相同,可以用赋值操作符DUP进行说明。

总结

第一次上汇编课是有一些吃力,但是当了解了各个语句的意思以后就简单了不少。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值