2020-12-02 汇编书上实验五

8:00 添加了SSD4实验报告内容。
2:00pm-2:52 英语准备PPT,写稿,单独练习。
2:52- 汇编实验+作业。
3:00 实验5 编写、调试具有多个段的程序
程序如下:(使用edit编辑)在这里插入图片描述编译连接之后,开始debug:在这里插入图片描述-u输出这种奇怪的东西,我不太理解为什么。
-d一下:在这里插入图片描述emm看来CS:IP指向的的确是我的程序,只不过不是正常的代码。我一步一步运行一下,看看到代码段会不会正确。
运行几步之后就报错了。我看一下之前的程序
在这里插入图片描述并不是像这次这样的。这是什么问题?可能是文件格式?
看了一下问题,发现之前我直接写的debug ex5_1,运行的;这样就直接运行了一个没有后缀的文件,而不是编译链接生成的ex5_1.exe。问题解决了。在这里插入图片描述
3:57 我在想,为什么我已经有堆栈段了,在连接的时候还是有warning: no stack segment呢?

4:15 如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为在这里插入图片描述网上和我使用的答案是:(N/16+1)*16 [说明:N/16只取整数部分],我认为是错的。因为应该是向上取整的;自己写了一个(N/16+N%16?0;1)*16 其实就是ceil(N/16) *16。我想的是正确的。因为举例是一个堆栈段占16个字节,另一个占4个字节,但是堆栈段和数据段相差就是1H。问题解决了。

11:49 有一个错误,程序在执行一段代码之后变成非预期的内容。

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 es, ax
	   
	   mov ax, c
	   mov ds, ax
	   mov bx, 0
	   mov cx, 8
	s1:mov ax, es:[bx]
	   mov [bx], ax
	   inc bx
	   loop s1
	   
	   mov ax, b
	   mov es, ax
	   mov bx, 0
	   mov cx, 8
	s2:add ax, es:[bx]
	   mov [bx], ax
	   add bx, 1
	   loop s2
	   
	   mov ax, 4c00h
	   int 21h
	   
code ends

end start

发现问题是这样的:不应该直接add ax, es:[bx],而是mov ax, es[bx]然后
加到[bx]中。
改正后这个问题解决了,但是除了第一个DS:[0]其他的都是三倍。经过-t逐步debug找到问题:直接mov ax, es:[bx]得到的ax是一个字型的,即0102,0203等。所以除了01本身其它都是加了两次。参考答案中,每次bx是+2。我认为,一个0-255的数字只能占一个字节,因此每次都只需要加一即可;但答案的+2也没有问题,让我有些困扰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值