汇编实验1遇到的问题及解决之记录(以及尚未解决的疑惑,大神可以帮帮看看吗)

比较有用的参考资料的网址:
https://www.doc88.com/p-6601373721664.html

http://www.rsdown.cn/down/168010.html (masm和link的下载)

1.CLD汇编语言是什么意思
答:汇编语言CLD(cleardirection)清除方向标志,cld即告诉程序si,di向前移动,相反功能指令是STD,将方向标志位DF置1, 在字串操作中使SI或DI的地址指针自动递减,字串处理由后往前。
CLD指令功能:
将标志寄存器Flag的方向标志位DF清零。
在字串操作中使变址寄存器SI或DI的地址指针自动增加,字串处理由前往后。

2.汇编问题rep movsb 是什么意思?
答:先说说MOVSB(MOVe String Byte):即字符串传送指令,这条指令按字节传送数据。通过SI和DI这两个寄存器控制字符串的源地址和目标地址,比如DS:SI这段地址的N个字节复制到ES:DI指向的地址,复制后DS:SI的内容保持不变。
而REP(REPeat)指令就是“重复”的意思,术语叫做“重复前缀指令”,因为既然是传递字符串,则不可能一个字(节)一个字(节)地传送,所以需要有一个寄存器来控制串长度。这个寄存器就是CX,指令每次执行前都会判断CX的值是否为0(为0结束重复,不为0,CX的值减1),以此来设定重复执行的次数。因此设置好CX的值之后就可以用REP MOVSB了。
CLD(CLear Direction flag)则是清方向标志位,也就是使DF的值为0,在执行串操作时,使地址按递增的方式变化,这样便于调整相关段的的当前指针。这条指令与STD(SeT Direction flag)的执行结果相反,即置DF的值为1。
;example:把当前数据段中偏移1000H开始
;的100个字节数据传送到偏移2000H开始的
;单元中
cld ;指针增值
push DS ;当前数据段,因此压入栈中保存
pop ES ;使ES=DS
mov SI,1000H ;源串指针初值
mov DI,2000H ;目的串指针初值
mov CX,100 ;循环次数
Next:
lodsb ;取一个字节
stosb ;存一个字节
loop Next ;循环CX次
;以下程序片段与上面的等价:
cld ;地址指针增值
……
mov CX,100 ;循环CX次
Next:
movsb ;每次传送一字节数据
loop Next
;或者用更简单的写法:
cld
……
mov CX,100
rep movsb

3.DOSBOX 0.74版怎么用?
https://jingyan.baidu.com/article/9f63fb917e3beac8410f0e58.html

https://www.baidu.com/link?url=O8WAHuqaAHJkZiKWQh5iywPI-Q-nOhQhC_RKrSL72Et8FdZ_ogLidg3Bi0USAtOIWoHYFY4Zn1AtMLlrh0GtCK&ie=utf8&f=8&ch=2&tn=98010089_dg&wd=dosbox怎么样运行&oq=dosbox怎么样运行&rqlang=cn&oe=utf8

https://www.baidu.com/link?url=mL9nrDlS9T1uuIDsjtrYairhhnu-HxJE_tOzEb6G9yzGS6JzQ6aO5thhTWCoqZXK8wapoOl-3cEnuILrKo_esMmDqV5C8mW-0KmjeEjJPQO&wd=&eqid=8c242ed400bc3b4a000000035d9d3c69

在输入框状态下z:>mount c d:\dos
"z:>" 这个是提示符, “c”作为虚拟C盘 ,“d:\dos”你要虚拟的文件夹位置。
简单的说,你把你要虚拟的文件夹位置换掉上面的;

运行DOSXBOX之後
Z:\ >mount c c:\masm5 按下ENTER
键入
C:\ 按下ENTER(此时的DOSBOX中的C磁盘就是masm5的文件夹了)

4.汇编语言中 mount d d:\是什么意思?
答:这个应该不是汇编指令吧
应该是dosbox的指令吧,用来把自己d盘挂载到dosbox的d盘吧

······························································
加载目录到c盘

输入c:\ 进入到c盘,看到我们已经在c盘(D:\Masm\c)下了。(那句mount c D:\Masm\c就是把D:\Masm\c这个目录当作c盘目录
·······················································
5.libpng warning: iCCP: known incorrect sRGB profile

原因:libpng 对GIMP生成的png报错 libpng warning: i: known incorrect sRGB profile 原因是新版的libpng增强了检查,发出警告。此警告可以忽略。

2019/10/13 补充
6.链接程序link.exe是怎么知道你是否定义了堆栈段呢?它是怎么判断并发出警告的呢?
答:你定义了堆栈段没有,很容易看出来。
stacksg segment stack中最后的stack让连接程序将定义的堆栈段当堆栈段用了。
参考文章,写的很好:
https://m.aliyun.com/yunqi/articles/75835

7.当在DOSBOX打开的情况下,在MASM文件夹下面又放入了新的文本文件(.txt)时,
这时用copy xx.txt xx.asm命令,会报出xx.txt文件找不到的提示,所以,要关闭DOSBOX的窗口,再次重新打开才可以正确识别出新的文件。
在这里插入图片描述
(其中sy1.txt是打开DOSBOX后新放入文件夹的,无法找到,重新打开DOSBOX就可以)
8.假如masm成功的话,也就是如果汇编成功的话,会给出0警告0错误的提示,否则会给出存在的问题的提示,字体比较小,注意仔细看。

9.命令link,masm,可以写上文件后缀,如.obj,.asm,也可以不写。

10.当修改了源文件的文本文件后,还需要再次把它改名为.asm文件才行。否则,不copy,直接masm、link,执行,还是原来的结果,而不是期待的修改后的出现的结果,这期间,不需要重新打开DOSBOX。

尚未解决的疑惑

1.在.txt文件中写汇编时,注释可以是中文注释吗?
(这个应该没有影响的呀,为什么自己一个文件里写了很多中文注释,无法形成.obj文件呢?报出错误:Out Of Memory,还是这个错误是别的原因导致的呢?)

你可能感兴趣的:(#,汇编实验)