汇编语言实验报告 联系客服

发布时间 : 星期日 文章汇编语言实验报告更新完毕开始阅读

3. 将下面的程序编译连接,用Debug加载、跟踪,然后回答问题:

assume cs:code,ds:data,ss:stack code segment

start: mov ax,stack mov ss,ax mov sp,16 mov ax,data mov ds,ax push ds:[0]

push ds:[2] pop ds:[2] pop ds:[0] mov ax,4c00h int 21h code ends data segment dw 0123H,0456H data ends stack segment dw 0,0 stack ends end start

① CPU执行程序,程序返回前,data段中的数据均不变.

② CPU执行程序,程序返回前,cs=__2931___、ss=__2934___、ds=__2935____.

③ 设程序加载后,code段的段地址为X,则data段的段地址为___X+3_____,stack段的

段地址为___X+4____。

4.若将1,2,3题中的最后一条伪指令“end start“改为“end”,则那个程序仍然可以正确执行?请说明原因。

答:这三条程序仍然可以正确执行,只是不知道入口位置.如果不指明入口位置,则程序从所分配的空间开始执行,前2个是数据段,只有从第3条开始是指令代码。

5.程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中。

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 c segment

db 0,0,0,0,0,0,0,0 c ends

code segment start:

mov ax,a mov ds,ax mov ax,b mov es,b mov bx,0 mov cx,8 s: mov al, [bx] add es:[bx],al inc bx loop s

mov ax,c mov ds,ax mov bx,0 mov cx,8

s0: mov al,es:[bx] mov [bx],al inc bx loop s0

mov ax,4c00h int 21h code ends end start

一次循环版:

mov ax,a

mov ds,ax ;ds指向a段地址 mov ax,b

mov es,ax ;es指向b段地址

mov bx,0 mov cx,8

s: mov al,[bx] add al,es:[bx] mov dx,c

mov ds,dx ;ds指向c段地址 mov [bx],al mov ax,a

mov ds,ax ;重新将ds指向a段 inc bx loop s

一次循环版(改进版): ;利用堆栈

mov ax,a mov ds,ax mov ax,b mov es,ax mov ax,c mov ss,ax

mov bx,0 mov cx,8

s: mov ax,[bx] mov ss:[bx],ax mov ax,es:[bx] add ss:[bx],ax inc bx loop s

6.程序如下,编写code段中的代码,用push指令将a段中的word数据,逆序存储到b段中。

assume cs:code a segment

dw 1,2,3,4,5,6,7,8 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 bx,b mov ss,bx mov sp,16

mov bx,0 mov cx,8 s: push [bx] add bx,2 loop s

mov ax,4c00h int 21h code ends end start