鱼C论坛

 找回密码
 立即注册
查看: 4592|回复: 11

[汇编作业] 实验5 编写、调试具有多个段的程序

[复制链接]
发表于 2020-3-29 14:12:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(1)
assume cs:code,ds:data,ss:stack

data segment
        dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
data ends
stack segment
        dw 0,0,0,0,0,0,0,0
stack ends

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
end start
①ss=082D,cs=0830,ds=081E
-u之后,原本stack替换为082F,data替换为082E
-d 082e
082e:0000 23 01 56 04 89 bc 0a-ef 0d ed 0f ba 0c 87 09
对比
data segment
        dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
data ends
可知数据的排列方式
cpu执行后
082e:0000 23 01 56 04 89 bc 0a-ef 0d ed 0f ba 0c 87 09 data无变化
②cs=0830 ss=082f ds=082e
③X-0002H X-0001H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-29 14:24:11 | 显示全部楼层
本帖最后由 流风逸雪 于 2020-3-29 14:32 编辑

(2)
assume cs:code,ds:data,ss:stack

data segment
        dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
data ends
stack segment
        dw 0,0,0,0,0,0,0,0
stack ends

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
end start
①ss=082D,cs=0830,ds=081E
-u之后,原本stack替换为082F,data替换为082E
-d 082e
082e:0000 23 01 56 04 00 00 00-00 00 00 00 00 00 00 00
cpu执行后
082e:0000 23 01 56 04 00 00 00-00 00 00 00 00 00 00 00 data无变化
②cs=0830 ss=082f ds=082e
③X-0002H X-0001H
④(N+16)整除16再乘以16个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-29 14:41:55 | 显示全部楼层
本帖最后由 流风逸雪 于 2020-4-8 12:56 编辑

(3)
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
①ss=082D,cs=0830,ds=081E
-u之后,原本stack替换为0832,data替换为0831
-d 0831
0831:0000 23 01 56 04 00 00 00-00 00 00 00 00 00 00 00
cpu执行后
082e:0000 23 01 56 04 00 00 00-00 00 00 00 00 00 00 00 data无变化
②cs=082e ss=0832 ds=0831
③X+0003H X+0004H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-29 14:56:45 | 显示全部楼层
(4)
第1题不行,debug后一堆无关代码
第2题也不行,debug后也是一堆无关代码
第3题可以,debug后是正确代码
可能1、2将code放在data和stack后面但end不知道在start的code的末尾划边界保护code
以至于其他的程序将code的位置覆盖掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 12:18:23 | 显示全部楼层
(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
c segment
        db 0,0,0,0,0,0,0,0
c ends

code segment
start:
        mov ax,a
        mov ds,ax
        mov cx,8
        mov bx,0
        
s:        mov ax,[bx]//还想过用ss:[sp]来扩展更多可用指针变量
        add bx,16//结果还不如利用a,b,c数据堆放的结构来变换bx
        add ax,[bx]//虽然这种方式很憨,但却体现出了底层实际上运行的方式
        add bx,16
        mov [bx],ax
        sub bx,32
        add bx,2
        loop s

        mov ax,4c00H
        int 21h
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-1 13:22:49 | 显示全部楼层
(6)
assume cs:code
a segment
        db 1,2,3,4,5,6,7,8
a ends
b segment
        db 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,8
        mov cx,4//word 型为两个字节,即0000H,八个字节就要执行4次
        mov bx,0
        
s:        push [bx]
        add bx,2
        loop s

        mov ax,4c00H
        int 21h
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-5 15:49:01 | 显示全部楼层
流风逸雪 发表于 2020-3-29 14:41
(3)

①ss=082D,cs=0830,ds=081E

你好,我怎么觉得第三问是X+0003H,X+0004H呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 12:56:10 | 显示全部楼层
何足道 发表于 2020-4-5 15:49
你好,我怎么觉得第三问是X+0003H,X+0004H呢?

谢谢指正,现在改了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 11:01:34 | 显示全部楼层
第六题的SP=8是不是有问题呀,SP每次不都是+2或-2么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-3 20:51:17 | 显示全部楼层
第六题出现了一个错误,由于8086 push 和 pop 的操作 以字型为单位 ,每次push [bx],拿出来的数其实是高地址+低地址 然后再放到栈空间,例如拿出来其实是0201而不是0102,这样导致最后push进去的最底层其实是02 ,再上一层是01,程序运行完后 栈空间0地址到7地址其实是-- 07 08 05 06 03 04 02 01; 解决方法可以在循环中用ah承接第一次[bx],再自增inc bx ,再用al承接第二次[bx[,这样ax=0102,push ax 之后最底层才是01,再上层才是02,最后答案才是逆序08 07 06 05 04 03 02 01.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-29 11:29:10 | 显示全部楼层
楼主,第五题定义的是db吧,bx+2感觉有点问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-31 10:27:41 | 显示全部楼层
你是纯纯的SB,瞎搞  第五题你的b和c呢   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 22:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表