王爽汇编语言检测点6.1(详细解题步骤)

检测点6.1(王爽汇编语言(第3版))


(1)下面程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:

assume cs:codesg

codesg segment

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

start:mov ax,0

mov ds,ax ;设置ds=0

mov bx,0

mov cx,8 ;cs存放循环次数,因为修改8个字,故循环次数为8

s:mov ax,[bx] ;将ds:[bx]中的数据送入ax寄存器中

mov cs:[bx],ax ;将ax的值回写到code段的前16个字节单元中

add bx,2 ;每次修改2个字节,bx用来存放偏移地址,故每循环一次递增2

loop s

mov ax,4c00h

int 21h

codesg ends

end start

(2)下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内,完成程序:

assume cs:codesg

codesg segment

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

dw 0,0,0,0,0,0,0,0,0,0 ;10个字单元用作栈空间

start:mov ax,cs

mov ss,ax ;设置栈在代码中的内存,令ss=cs

mov sp,24h ;初始化栈顶指针,栈顶指针应该是16+20=36==24H,sp=0024H

mov ax,0

mov ds,ax ;将ds指向0000段地址的空间

mov bx,0 ;初始化偏移地址

mov cx,8 ;循环次数为8次

s:push [bx] ;将ds:[bx]数据压栈

pop ss:[bx] ;将栈内数据弹栈到SS:00~0f

add bx,2

loop s

mov ax,4c00h

int 21h

codesg ends

end start

经验分享 程序员 微信小程序 职场和发展