实验二 汇编语言的简单编程

1.debug的补充

实验一已经初步对debug的命令有了了解,这次主要结合上次所讲的三种段进行操作

  • D命令

 实验一的D命令用于查看内存单元的命令,简单回顾一下:

"d  段地址:偏移地址"用于查看这个指定地址的内容。

现在我们知道段地址储存在段寄存器中,我们可以换一种方式:                                                      "d 段寄存器:偏移地址"                                                                                                                     

 ① - D DS:0     // 查看内存区(数据区)的内容

 ② - D CS:0     // 查看代码区的内容

 ③ - D SS:0     // 查看栈中的内容              

  • E,A,U命令 

 E,A,U命令也可以直接对寄存器进行使用,实验一中这些指令的作用也在此回顾一下:

E指令用于修改内容,A指令是以汇编语言的格式向内存单元写入,U指令是以汇编语言的形式显示代码段中的指令。现在对段寄存器进行操作会更加直观:

① - E DS:0  11 22 33   //向ds中修改内容

② - U CS:0                  //将代码段中的机器码显示为汇编指令的形式

③ - A DS:0                  // 以汇编指令的形式写入内存单元

2.指令执行中的意外 

 我们知道CPU执行指令是一条一条执行的,但对于指令:

mov ax,2000                                                                                                                                    mov ss,ax                                                                                                                                            mov sp,10

我们可以用debug实验一下

 可以看得到,第一步要执行的是mov ax,2000,没有问题,第二步执行mov ss,ax也没什么问题,可出现问题的就是第三步  ,为什么没有第三步的执行?翻阅了书籍,明白了第三步和第二步同时执行了(也不能说同时执行,应该说第三步紧接着第二步之后就执行了。当然我们会感到疑惑,为什么会出现这个问题。-----中断机制,我们目前无法理解只能知道当debug的T命令在执行修改寄存器SS的指令时,下一条指令就紧接着被执行了。

3.实现第一个程序(先解释再实验)

 简单来说,执行一个简单的程序需要三步,编程--连接--执行,接下来会对以下内容依次解释:

在解释以上内容之前打算先介绍源程序 

assume  cs:codesg

codesg  segment

              mov ax,0123H

              mov bx,0456H

              add  ax,bx

              add ax,ax

              mov ax,4c00H

              int 21H

codesg  ends

end

 1.伪指令(由编译器执行)

   (1)xxx     segment

            ....... 

            .......

             xxx        ends

segment和ends是成对使用的一对伪指令,用于说明一个段的开始和结束(一个汇编程序有多个段,正如前面提到的代码段,数据段和栈段 )

(2) end

end表示一个汇编程序的结束,编译器在遇到end后才会停止否则编译器将无法知道什么时候结束 

(3) assume

我们只需要知道assume是将相关的段寄存器和特定用途的段联系在一起,比如:上述代码中CS和codesg这个用来作为代码段的段联系在一起。 

 以上就是一个简单的源程序,当然我们对于汇编指令的最后两行存在疑惑,其实最后两句代码的作用是程序返回。为什么要程序返回?这与计算机操作系统有关,CPU要将控制权返回给程序才能让这个程序运行。

  • 实验部分 

1.打开dos的编辑(edit)

 

可以参考我的编辑内容 

 

接着将文件保存为c:\1.asm 

2.编译源程序 

 首先要找到对应的编译器

 

【.ASM】已经指明了后缀名,我们输入1也行,一定要指明文件路径,因为上文我们已经定义在这个文件里。【1.OBJ】:后可以输入你要指定生成的文件路径。后面的是生成中间文件,可以忽略完成后就像下图一般

 

 3.连接源程序

 

 那么连接的作用是什么,这里作简单解释:

  • 当源程序很大时会被分成多个小的源程序再进行编译,最后用连接将文件连接在一起,生成可执行文件
  • 如果程序要调用库文件中的子程序,那么就要将该子程序与该程序生成的目标文件连接在一起
  • 用连接程序将机器码处理为可执行文件

4.执行程序 

遗憾的是我们的程序并没有向显示屏输入任何信息,但是不要灰心,随着不断地学习,我们将会写出很棒很好的程序,希望我们继续沉下心,进行学习! 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值