汇编语言_实验五_编写、调试具有多个段的程序

四、实验结论

 

(1)

①data段中数据为 23 01 56 04 89 07 bc 0a ef 0d ed 0f ba 0c 87 09

②cs=076C、ss=076B、ds=076A

③X-2,X-1

(2)

①data段中数据为 23 01 56 04 00 00 00 00 00 00 00 00 00 00 00 00

②cs=076C、ss=076B、ds=076A

③X-2,X-1

④ (此处括号意为向上取整)

(3)

①data段中数据为 23 01 56 04 00 00 00 00 00 00 00 00 00 00 00 00

②cs=076A、ss=076E、ds=076D

③X+3,X+4

(4)

程序(3)可以正确执行,因为如果不使用start,程序将以第一个段作为入口,而在前两个程序中,该处存放的是数据而非我们想要执行的汇编指令。

(5)

源代码如下:

assume cs:code

a segment

  db 1,2,3,4,5,6,7,8

a ends

b segment

  db 1,2,3,4,5,6,7,8

b ends

c1 segment  

  db 8 dup(0)

c1 ends         

code segment

start:

         mov ax,a

         mov ds,ax

         mov bx,0

         mov ax,c1

         mov es,ax

         mov cx,8

              s:mov ax,0

         add al,[bx]

         add al,[bx+10H]

         mov es:[bx],ax

         add bl,1

         loop s

         mov ax,4c00h

         int 21h

code ends

end start

①     实现数据相加前,数据段C1中前八个字节如图所示:

 

②     执行完实现加运算的代码后,逻辑段C1中的8个字节如图所示:

 

 经验证发现,该代码确实实现了数据段a,b中数据相加。

(6)

源代码如下:

assume cs:code

a segment

  dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

a ends

b segment

  dw 0,0,0,0,0,0,0,0

b ends

code segment

start:

         mov ax,a

         mov ds,ax

         mov ax,b

         mov ss,ax

         mov sp,10h

         mov cx,8

         mov bx,0

         s:push [bx]

         add bx,2

         loop s

         mov ax,4c00h

         int 21h

code ends

end start

①     在push操作执行前,查看逻辑段b的8个字单元信息:

 

②      执行 push操作,然后再次查看逻辑段b的8个字单元信息:

 

经验证,此时数据段b中的前八个字数据恰好是数据段a中的前八个字数据逆序存放。

 

五、总结与体会

 

通过本次实验,了解了包含多个段的程序各段加载后在内存中各自分配的容量以及彼此间的相对位置,进一步掌握了使用寄存器间接寻址,熟悉了loop命令的使用。

posted on 2018-11-26 19:34  Alexander_Yang  阅读(194)  评论(0编辑  收藏  举报

导航