Loading... <!-- wp:audio {"id":178,"align":"center"} --> <figure class="wp-block-audio aligncenter"><audio controls src="https://www.cjovi.icu/usr/uploads/2020/10/02-Sweet-Child-O-Mine.m4a"></audio><figcaption><span class="has-inline-color has-luminous-vivid-amber-color"><em><span class="external-link"><a class="no-external-link" href="https://music.163.com/#/song?id=18095043&market=baiduqk" target="_blank"><i data-feather="external-link"></i>Sweet Child O' Mine</a></span></em></span></figcaption></figure> <!-- /wp:audio --> <!-- wp:heading {"level":4} --> <h4><span class="has-inline-color has-luminous-vivid-amber-color">写在笔记之前</span></h4> <!-- /wp:heading --> <!-- wp:paragraph --> <p>今天一个上午都在做第5个实验,一方面是上午的时间比较少,另一方面也是这个实验的代码量增大。现在来看,我的汇编能力已经有了一点,王爽这本书写的确实是很好,相信能为我的二进制研究打下基础。希望今天能再看完一章。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>第七章结束的很快,40分钟左右全部完成</p> <!-- /wp:paragraph --> <!-- wp:heading {"level":3} --> <h3>灵活的寻址方式</h3> <!-- /wp:heading --> <!-- wp:paragraph --> <p>首先介绍寄存器di,si这两个与bx类似的寄存器,但是不能高低位分开使用。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>于是我们有了这样几种寻址方式:</p> <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>[bx] [si] [di] [立即数] ;以下等价 [bx+si] [bx][si] ;以上等价 ;以下等价 [bx+立即数] 立即数[bx] ;以上等价 ;以下等价 [bx+di+5] 5[bx][di] [bx].5[di] [bx][di].5 ;以上等价</code></pre> <!-- /wp:code --> <!-- wp:paragraph --> <p>然后有两个运算符and,or</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p><code>or al,00100000b</code> 与C中的al=al|00100000b等价,同时若al中存的是字母ASCII码,则可以将这个字母变成大写字母</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>类似的</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p><code>and al,11011111b</code> 与C中的al=al&11011111b等价,同时若al中存的是字母ASCII码,则可以将这个字母变成小写字母</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>最后提供了嵌套循环时的cx处理思路,因为loop必须用cx做循环标识符,所以需要保留cx的值,所以可以使用一个栈来保存,具体可以看下面的代码</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>别的没什么特别的,贴一下本章的实验源码</p> <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>assume cs:code,ss:stack,ds:data stack segment dw 0,0,0,0,0,0,0,0 stack ends data segment db '1. display ' db '2. brows ' db '3. replace ' db '4. modify ' data ends code segment start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,0 mov cx,4 mov bx,0 s1: push cx ;备份cx mov cx,4 mov di,0 s2: mov al,3[bx][di] and al,11011111b mov 3[bx][di],al inc di loop s2 add bx,16 pop cx ;还原cx loop s1 mov ax,4c00h int 21h code ends end start</code></pre> <!-- /wp:code --> <!-- wp:paragraph --> <p></p> <!-- /wp:paragraph --> 最后修改:2021 年 01 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧