流风逸雪 发表于 2020-3-28 13:55:12

检测点6.1

本帖最后由 流风逸雪 于 2020-3-28 13:56 编辑

(1)
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,
        mov cs:,ax//dw对应地址为cs:从0到定义数量*2,将ds:的数覆盖dw
        add bx,2
        loop s
       
       
        mov ax,4c00H
        int 21h
codesg ends
end start

流风逸雪 发表于 2020-3-28 15:04:20

(2)
assume cs:codesg
codesg segment
        dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
        dw 0,0,0,0,0
start:
        mov ax,cs//要将第二行作为栈空间的地址传递给ss,以便push和pop
        mov ss,ax
        mov sp,16
        mov ax,0
        mov ds,ax
        mov bx,0
        mov cx,8
s:        push
        pop cs://入栈再出栈相当于传递值
        add bx,2
        loop s
       
       
        mov ax,4c00H
        int 21h
codesg ends
end start

红尘摆渡人 发表于 2020-3-30 22:04:40

第二题, dw 0,0,0,0,0,0,0,0//后面是8个0
            mov sp,32

流风逸雪 发表于 2020-4-1 10:32:38

红尘摆渡人 发表于 2020-3-30 22:04
第二题, dw 0,0,0,0,0,0,0,0//后面是8个0
            mov sp,32

你仔细看我的注释,入栈再出栈不需要那么多0,事实上2个0就够了

流风逸雪 发表于 2020-4-1 10:36:39

本帖最后由 流风逸雪 于 2020-4-1 11:43 编辑

红尘摆渡人 发表于 2020-3-30 22:04
第二题, dw 0,0,0,0,0,0,0,0//后面是8个0
            mov sp,32

其实就算0个数少于8,编译器也会分配16个00.问题在于入栈再出栈无论循环多少次占用的空间都不会超过2个0.

太残暴了 发表于 2020-4-29 22:52:19

楼主,请问
为啥说
0个数少于8,编译器也会分配16个00,

sos2356 发表于 2021-2-2 16:56:39

流风逸雪 发表于 2020-4-1 10:32
你仔细看我的注释,入栈再出栈不需要那么多0,事实上2个0就够了

对的,实际上2个就够了,取决于你准备留的栈多大来设置,只要是>2 都可以

lz5215560 发表于 2021-3-30 03:19:30

(2)题目不是要求10个字单元的栈空间吗?
怎么把题目都改了? 如果是10个字单元的栈空间,sp = 15 + 10 * 2 + 1 = 36 或 24H

goddnsfc 发表于 2021-4-4 14:27:21

结果 4BDB吗?+

qq113009 发表于 2021-10-12 02:24:30

本帖最后由 qq113009 于 2021-10-12 02:41 编辑

{:5_97:}

david0716 发表于 2021-12-31 01:57:16

完全错误,看的我一脸懵逼

xiagm 发表于 2022-2-9 11:05:06

按照题目MOV SP,34H啊,我是这样理解的

snrjtg1 发表于 2022-2-16 18:40:38

本帖最后由 snrjtg1 于 2022-2-16 19:48 编辑

怎么感觉取出来的第一个数就把栈顶给覆盖了
sp为8,一开始栈顶在0789的07上,然后第一次压入的【bx】是DS:0也就是0000:0里的数据,然后再pop cs:j是将0123中用ds:0中的数据给覆盖了,下一次就用0000:1中的数据将cd:中的数据0456给覆盖了
这是我的理解
页: [1]
查看完整版本: 检测点6.1