shuiyu 发表于 2017-7-2 22:12:26

《零基础入门学习汇编语言》第二十三讲(问题5.1)

本帖最后由 shuiyu 于 2017-7-6 22:50 编辑

小白刚学,不对的请各位大佬指正,谢谢{:10_254:}

一、和内存单元的描述
(1)是什么呢?
和有些类似,表示内存单元,它的偏移地址是0。
同样也表示一个内存单元,它的偏移地址在bx中,比如下面的指令:
mov ax,
mov al,
(2)在debug中我们可以用:mov ax,这样的命令赋值。但是我们在编译器中就不能这样使用了。因为编译器不认识它。
比如我们要给AX赋值10000H这个内存的数值,在编译器中我们要这样用:
mov bx,10000H
mov ax,
大家都会发现多绕了一步,但是我们没办法,因为编译器不认识。
(3)具体解释:
mov ax,
功能:bx 中存放的数据作为一个偏移地址EA ,段地址SA 默认在ds 中,将SA:EA处的数据送入ax中。
即: (ax)=(ds *16 +(bx));

mov ,ax
功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA处。
即:(ds *16 +(bx))=(ax)


二、loop、描述性符号“()”(其实就是取括号内的内容)、约定符号idata表示常量
(1)loop:英文单词“loop”有循环的含义,显然这个指令和循环有关。
(2)为了描述上的简洁,在以后的课程中,我们将使用一个描述性的符号 “() ”来表示一个寄存器或一个内存单元中的内容。
1.ax中的内容为0010H,我们可以这样来描述:(ax)=0010H;
2.2000:1000 处的内容为0010H,我们可以这样来描述:(21000H)=0010H;
3.对于mov ax,的功能,我们可以这样来描述:(ax)=((ds)*16+2);
4.对于mov ,ax 的功能,我们可以这样来描述:((ds)*16+2)=(ax);
5.对于 add ax,2 的功能,我们可以这样来描述:(ax)=(ax)+2;
6.对于add ax,bx的功能,我们可以这样来描述:(ax)=(ax)+(bx);
7.对于push ax的功能,我们可以这样来描述:
(sp) = (sp)-2
((ss)*16+(sp))=(ax)
8.对于pop ax 的功能,我们可以这样来描述:
(ax)=((ss)*16+(sp))
(sp)=(sp)+2

(3)我们在Debug 中写过类似的指令:mov ax,,表示将 ds:0 处的数据送入ax中。指令中,在“[…]”里用一个常量0表示内存单元的偏移地址。以后,我们用idata表示常量。
例如:
mov ax,就代表mov ax,、mov ax,、mov ax,等。
mov bx,idata就代表mov bx,l、mov bx,2、mov bx,3等。
mov ds,idata就代表mov ds,1、mov ds,2等,它们都是非法指令。

问题5.1
(1)问题主要考我们的就是的应用。
(2)最后我们得出:
21000H=BE
21001H=00
21002H=BE
21003H=00
21004H=BE
21005H=BE
21006H=BE
21007H=20(最后这个空题目没有赋值,所以就看你的电脑原来是什么值,那就是什么值了)

附上我自己的答案:



谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}


   
本节结束,多谢览阅!
小白刚学,不对的请各位大佬指正,谢谢{:10_254:}

小阿哥 发表于 2018-10-4 16:31:09

我21000到21006都理解,但是我最后21007却是BE,我这样是正确的还是哪里出错了

页: [1]
查看完整版本: 《零基础入门学习汇编语言》第二十三讲(问题5.1)