汇编语言(第四版)检测点 6.1 习题解答

检测点 6.1

(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
        mov bx,0
        mov cx,8
s:
        mov ax,[bx]
        ___________
        add bx,2
        loop s

        mov ax,4c00h
        int 21h

codesg ends
end start

分析:

由 mov ax,0 ;mov ds,ax ;mov bx,0 可知数据段指针指向的是内存 0:0 位置

mov cx,8 表示要循环 8 次 将 内存 0:0~0:15 单元中的内容改写程序中的数据

即每次改写 1 个字

由循环中 mov ax,[bx] 可知先将 0:0~0:15 单元中的8个字依次先存放到AX中,然后将数据存放到 cs:[bx] 指向的位置。

故空行处应该填写 mov cs:[bx],ax

(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,_____
    mov ss,ax
    mov sp,_____
    mov ax,0
    mov ds,ax
    mov bx,0
    mov cx,8
S:
    push [bx]
    ____________
    add bx,2
    loop s

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

分析:

数据部分:

数据(字)0123h0456h0789h0abch0defh0fedh0cbah0987h
偏移量00H02H04H06H08H0AH0CH0EH

栈部分:

数据(字)0000000000
偏移量10H12H14H16H18H1AH1CH1EH20H22H

由程序可知,所有数据、栈、代码都以一个代码段地址为基准,每次循环将内存中的一个字先放入栈段,再将数据出栈放入数据段。

故第一空填写:mov ax,cs

初始栈为空,栈顶地址为 CS:24h,故sp = 24h。

故第二空填写:mov sp,24h

将栈中数据弹出放入数据段

故第三空填写:pop cs:[bx]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值