简介:这份习题参考答案文档对应沈美明、温冬婵编著的《IBM-PC汇编语言程序设计》教材,面向正在学习8086汇编语言、需要课后核对与自测的本科生和自学者,可用于复习阶段或备考前检验对基础概念的掌握程度。文档共1个doc文件,压缩包约524KB,按教材章节顺序编排,逐题给出结果与推导过程。内容覆盖第一章的数制转换(十进制、二进制与十六进制的互化及十六进制四则运算校核)、8位补码表示与加减运算、CF与OF标志位的判断,以及ASCII码与字符串编码的换算;第二章则涉及I/O端口数量、字与字节在存储器中的存放图示、段地址与偏移地址合成物理地址等习题。每题保留完整算式与结论,便于读者对照自己的解题步骤,发现是概念理解偏差还是计算疏漏,尤其适合补码溢出判断这类易错点。已有116人学习。
1. 先看清这套题怎么考:答案对不对只占一半分
搜「汇编语言程序设计 答案」的人,十有八九是做完课后题想对个数,结果发现自己算出来的数和参考答案差了一位,或者 CF、OF 全凭感觉蒙。这门课的考法其实很固定:数制与补码、标志位判定、寻址方式与物理地址、指令序列编写、串操作与移位,五块轮着出,填空和编程各占半壁江山。真正拉开差距的不是那个十进制结果,而是你有没有把 EA、PA、CF、OF 写全——少写一个标志位,填空题直接半分起步。这篇按考点往下拆,每一块都给真题、给思路、给容易踩的坑,适合正在刷这本教材课后题、准备期末或复试机考的人直接照着练。
2. 数与编码:降幂法、补码、ASCII 三件套一个都不能软
这一章是整本书的第一道门槛,也是最容易“会做但写错”的地方。题目本身不难,难在格式:二进制要补足位、十六进制要带 H、负数要说明是补码还是无符号。很多人的卷面分不是丢在算错,而是丢在“没写清楚按哪种解释”。下面三个小节,每一节都对着教材第一章的原题走一遍。
2.1 十进制转二/十六进制:降幂法手算、除法取余校验
教材 1.1 给的四组数是 369、10000、4095、32767,答案分别是1 0111 0001B = 171H、10 0111 0001 0000B = 2710H、1111 1111 1111B = FFFH、111 1111 1111 1111B = 7FFFH。这四道题不是随便挑的:369 考降幂法,4095 考“全 1”边界,32767 考 16 位有符号数上限,10000 考一个既不是 2 的幂、也不是边界的普通数。
降幂法的动作要领是“从大到小减”:先找不超过目标数的最大 2 的幂。以 369 为例,256 能用,剩 113;64 能用,剩 49;32 能用,剩 17;16 能用,剩 1;1 能用,剩 0。用到的位是 256、64、32、16、1,对应二进制1 0111 0001。再把二进制从右往左每四位切一组,高位不够就补零:0001 0111 0001→1 7 1,写成 171H。
除法取余是另一半答案的校验手段,考场上没时间做两遍,但心里要有数:369 ÷ 16 = 23 余 1,23 ÷ 16 = 1 余 7,1 ÷ 16 = 0 余 1,余数从下往上读就是 171H。两种方法对得上,这道题才能放心往下走。
提示:写二进制时按四位一组留空格,比如
10 0111 0001 0000B。这不是为了好看,是防止你在转十六进制时数错位。
32767 这道题有个隐藏考点:它是 16 位补码能表示的最大正数,加 1 就变成 8000H,也就是 -32768。教材后面讲溢出时反复用这个边界,第一章先埋下伏笔。4095 对应 FFFH,同样是 12 位全 1,注意它只占 3 位十六进制,别顺手写成 0FFFH 又说不出为什么多一个 0。
2.2 补码:同一个 D8H,可以是 -40 也可以是 216
教材 1.6 问得很直接:D8H 和 FFH 分别当作补码带符号数和无符号数时,各表示多少。标准答案是 D8H 作带符号数为 -40、作无符号数为 216;FFH 作带符号数为 -1、作无符号数为 255。
这类题面试官和阅卷人都爱出,因为它一秒就能看出你懂不懂“最高位的权是负的”。D8H 展开成二进制是1101 1000,最高位是 1,说明是负数。按位权算:最高位权值是 -128,其余位正常加,-128 + 64 + 16 + 8 = -40。这个算法比“取反加一”快,而且不容易在补码边界上翻车。
取反加一路径也要会,因为编程题里求绝对值、求负数用的就是它:D8H 取反得 27H,加 1 得 28H,即 40,所以原数是 -40。两条路走出来的数一样,说明你这一步稳了。
到了 1.7,题目把“补码”换成“ASCII 码”,同一个十六进制数要给出两种解读:4FH 作补码是 79,作字符是O;2BH 是 43 和+;73H 是 115 和s;59H 是 89 和Y。这里最容易错的是 4FH——它最高位是 0,当补码就是正数 79,很多人一看字母 O 就以为要特殊处理。其实不用,ASCII 表里 4FH 就是大写 O,两个答案各自独立。
提示:题干只要出现“分别被看作”,就必须两套答案都写,只写一个按半分处理。这是血泪经验,不是客套话。
2.3 ASCII 与字符串:一句话摊成一行字节
教材 1.8 要求把For example,This is a number 369写成 ASCII 码值,答案是一长串 46H、6FH、72H、20H……最后以 0AH、0DH 结尾。这道题看着机械,实际上考三件事:字母大小写差 20H、空格是 20H、数字字符是 30H 起步。
把常用的几个记死,比临时查表快得多:0~9是 30H~39H,A~Z是 41H~5AH,a~z是 61H~7AH,空格 20H,逗号 2CH,.是 2EH。所以字符串里的369写成33H 36H 39H,不是03H 06H 09H——这个错每年都有人犯,本质是把“数字的值”和“数字字符的编码”混成一件事。
教材 3.12 是同一考点的进阶版:字符串BASED ADDRESSING存在 CSTRING 起始的字节单元里,要求把第 1 个和第 7 个字符送 DX。答案是:
MOV DH, CSTRING ; 第 1 个字符 'B' MOV DL, CSTRING+7-1 ; 第 7 个字符 'A',偏移是 7-1=6CSTRING+7-1这个写法是教材的习惯:题目说“第 7 个”,而下标从 0 开始,所以偏移是 6。写代码时直接写CSTRING+6也对,但保留7-1能让阅卷人一眼看到你意识到下标从 0 起。DX 高字节装第一个字符、低字节装第二个,顺序别反,反了就是 DH/DL 互换的低级错误。
3. 标志位:CF 看进位、OF 看符号,两列分开算
标志位是这门课的分水岭。前面的数制转换靠细心,标志位靠的是规则清不清楚。教材从 1.5 开始就把 CF 和 OF 摆在每道运算题后面,第三章 3.15、3.16 更是直接要求“根据结果设置 SF、ZF、CF、OF”。很多人在这里翻车,不是因为不会算,是因为把“最高位有进位”和“结果溢出”当成了一回事。
3.1 CF 与 OF 的判定:加法看进位、减法看借位、OF 看符号
先把规则写死。加法指令里,CF 等于最高位向外的进位;减法指令里,CF 等于借位,也就是“被减数不够减”。OF 只看符号:两个同号数相加得到异号结果就溢出,两个异号数相减得到与目的操作数相反的符号也溢出。注意 OF 跟 CF 完全独立,可以同时为 1,也可以同时为 0。
用教材 1.5 的三道题走一遍。第一道(-85)+76,两个操作数一负一正,不可能溢出,所以 OF=0;二进制相加1010 1011 + 0100 1100 = 1111 0111,最高位没有向外进位,CF=0。结果 0F7H 就是 -9,符合预期。
第二道85+(-76),同样是异号相加,OF=0;但0101 0101 + 1011 0100 = 1 0000 1001,最高位产生了进位,CF=1。结果取低 8 位是 09H。
第四道85-(-76),等价于 85+76=161,超过 8 位有符号数上限 127,所以 OF=1;两个正数相加最高位没有进位,CF=0,结果 0A1H 按补码读是 -95,正是因为溢出才显得“荒谬”。
教材 3.15 换成十六进制加法,规则一模一样。62A0H + 1234H = 74D4H,两正得正,SF=0、ZF=0、CF=0、OF=0。62A0H + 4321H = A5C1H,两正得负,SF=1、OF=1、CF=0。62A0H + CFA0H = 1 3240H,产生了进位所以 CF=1,但一正一负不会溢出,OF=0、SF=0。62A0H + 9D60H = 1 0000H,CF=1、ZF=1,其余全 0。
3.16 换成减法。1234H - 4AE0H = C754H,小减大要借位,CF=1,结果为负所以 SF=1,异号相减不溢出,OF=0。9090H - 4AE0H = 45B0H,负数减正数却得到正数,SF=0、OF=1,这是最典型的“看起来没借位但溢出了”。
| 运算 | 操作数符号 | 结果符号 | OF | CF |
|---|---|---|---|---|
| 62A0H + 1234H | 正 + 正 | 正 | 0 | 0 |
| 62A0H + 4321H | 正 + 正 | 负 | 1 | 0 |
| 62A0H + CFA0H | 正 + 负 | 正 | 0 | 1 |
| 9090H - 4AE0H | 负 - 正 | 正 | 1 | 0 |
提示:先把 OF 判完再判 CF,因为 OF 只看符号、不依赖具体数值,判完这一项心里就有底了。
3.2 双字长加减:ADC 接住进位,SBB 接住借位
多字节运算考的是“进位能不能传下去”。教材 3.20 要求把 DATAX 和 DATAY 两个双字数据相加,结果存回 DATAY。正确写法是先加低位、再用 ADC 加高位:
MOV AX, DATAX ; 取第一个双字的低 16 位 ADD DATAY, AX ; 低位相加,结果写回,同时产生 CF MOV AX, DATAX+2 ; 取第一个双字的高 16 位 ADC DATAY+2, AX ; 高位相加,把上一次的 CF 一起加进去 MOV WORD PTR DATAY+4, 0 ADC WORD PTR DATAY+4, 0 ; 把最高位产生的进位收进扩展字关键在于第二步用的必须是 ADC 而不是 ADD。ADC 会把 CF 当操作数之一,低位相加时产生的进位就这样被带进高位。中间不能插入任何影响 CF 的指令,比如CMP、SUB、移位,插进去进位就丢了,这是最常见的手写错误。
3.21 考反向操作:对 DX:AX 里的双字长数求补。教材给了两种写法,推荐这种:
NEG DX ; 先对高位取补 NEG AX ; 再对低位取补 SBB DX, 0 ; 低位取补产生的借位从高位扣掉顺序很重要:先高位后低位,最后用 SBB 把低位NEG产生的借位补到高位上。如果顺序反过来,NEG AX之后NEG DX会把 CF 覆盖掉,借位就丢了。3.22 求双字绝对值用的是同一套思路,先判DX的符号,负数才走NEG DX / NEG AX / SBB DX,0,正数直接搬到结果单元。
3.3 乘除法:AX/DX 分工和“结果对不上”的根源
乘法除法的考点集中在寄存器分工。8 位乘法把 AL 和源操作数相乘,结果放 AX;16 位乘法把 AX 和源操作数相乘,结果放 DX:AX。除法反过来:8 位除法用 AX 作被除数,商在 AL、余数在 AH;16 位除法用 DX:AX 作被除数,商在 AX、余数在 DX。
教材 3.20 第 6 问要求 DATAX 除以 23,DATAX 是 0148H,即 328。写法是:
MOV AX, DATAX ; 被除数 0148H MOV BL, 23 ; 除数 23 DIV BL ; AL = 商 = 0EH,AH = 余数 = 06H328 ÷ 23 = 14 余 6,商 0EH、余数 06H,对得上。注意这里必须用无符号的 DIV,因为 DATAX 是无符号定义;如果题目明说带符号,就要换成 IDIV,并且被除数要先CWD扩展到 DX:AX。
3.18 那段程序更像综合题:MOV AX,1234H之后MOV CL,4、ROL AX,CL把 AX 循环左移 4 位变成 2341H,CF=1;DEC AX得 2340H;MUL CX把 AX 乘 4 得 8D00H。这段题的关键是记住ROL只影响 CF 和 OF,不影响 SF、ZF,而MUL之后 CF 和 OF 只有在结果高半部分为 0 时才清零——8D00H 的高半部分 AH=8DH 不为 0,所以 CF=OF=1。
移位指令用于乘除 2 的幂也是常考点。教材 3.25 要求把 +53 和 -49 分别乘 2、除 2。乘 2 用SAL,正数负数都适用:53 左移一位得 6AH,-49 左移得 9EH。除 2 要用SAR而不是SHR:SHR是逻辑右移,高位补 0,负数会被移成正数;SAR算术右移,高位补符号位,-49 右移一位得 0E7H,也就是 -25,向下取整。
4. 寻址方式:EA 怎么算、PA 怎么拼、小端怎么读
这一章是整本书的重头戏,也是填空题最爱出的地方。教材第三章几乎每道题都要先算有效地址或物理地址,算错了后面全错。下面把它拆成三层:先算 EA,再拼 PA,最后按小端规则把内存里的字节读成字。
4.1 七种寻址方式与有效地址
教材 3.1 给的条件是 (BX)=637DH、(SI)=2A9BH、位移量 D=7237H,要求分别按七种寻址方式求有效地址。这七种要能背下来:
| 寻址方式 | EA 表达式 | 本题取值 |
|---|---|---|
| 立即寻址 | 操作数在指令中,无 EA | — |
| 直接寻址 | EA = D | 7237H |
| 寄存器寻址 | 无 EA,操作数是 (BX) | 637DH |
| 寄存器间接 | EA = (BX) | 637DH |
| 寄存器相对 | EA = (BX) + D | 0D5B4H |
| 基址变址 | EA = (BX) + (SI) | 8E18H |
| 相对基址变址 | EA = (BX) + (SI) + D | 1004FH |
最后一行是这道题的陷阱:8E18H + 7237H = 1004FH,超过了 16 位偏移的表示范围最高进位丢失,所以 EA 写成 004FH。教材特意标出“超过了段的边界”,就是要你写出回绕这一步。光写 1004FH 不给分,因为偏移地址寄存器只有 16 位。
3.8 把同一套规则套到 12 条指令上,要求判断源操作数的寻址方式并算出物理地址。这类题的做法是两步:先看源操作数长什么样,是立即数、寄存器,还是带方括号的内存引用;再看方括号里用了哪些寄存器,BX 走 DS、BP 走 SS,出现 ES: 前缀就换段。第 7 问MOV AX,[BP]最容易错,很多人顺手按 DS 算成 20100H,正确值是 SS×16 + BP = 15010H。
4.2 物理地址:段基址左移四位再加偏移
物理地址的公式只有一条:PA = 段地址 × 10H + 偏移地址,也就是段地址左移 4 位再相加。教材 2.4 给的三组 3017:000A、3015:002A、3010:007A,算出来都是 3017AH,说明同一物理地址可以由不同段偏移组合表示,这是实模式分段的核心特征。
2.5 稍微绕一下:程序开始执行时 (CS)=0A7F0H、(IP)=2B40H,问第一个字的物理地址。把 CS 左移四位得 0A7F00H,加 IP 得 0AAA40H。这里有个细节,段地址是 5 位十六进制,题目特意提醒“最高位为字母要补 0”,就是防止你把 A7F0H 当成 4 位去移位。
默认段搭配建议直接背成表,做题时不用推导:
| 参与寻址的寄存器 | 默认段寄存器 | 可否段超越 |
|---|---|---|
| BX、SI、DI | DS | 可,加 ES: 等前缀 |
| BP | SS | 可 |
| SP | SS | 不可 |
| 串操作的 DI | ES | 不可 |
3.6 那道题把这条规则用足了:数据段 2000H 偏移处放着一个指针,低字是偏移 0FF10H、高字是段地址 8000H,要求把该变量装入 AX。做法是先取偏移、再取段地址送 ES、最后用 ES: 前缀跨段读:
MOV BX, [2000H] ; 取变量的偏移地址 0FF10H MOV AX, [2000H+2] ; 取变量的段地址 8000H MOV ES, AX ; 段地址只能通过寄存器进 ES MOV AX, ES:[BX] ; 跨段读目标变量MOV ES, AX这一句不能省,也不能直接写MOV AX, [8000H:0FF10H],8086 不允许在指令里直接写段基址。这是格式分,很多人过程对但写法不合法。
4.3 指令执行后 AX 是几:小端存储与错位读字
教材 3.4 是这类题的代表。条件 (DS)=2000H、(BX)=0100H、(SI)=0002H,内存里 20100H 起是 12H、34H、56H、78H,21200H 起是 2AH、4CH、B7H、65H。七条指令执行完 AX 各是多少:
| 指令 | 物理地址 | AX 结果 |
|---|---|---|
| MOV AX,1200H | — | 1200H |
| MOV AX,BX | — | 0100H |
| MOV AX,[1200H] | 21200H | 4C2AH |
| MOV AX,[BX] | 20100H | 3412H |
| MOV AX,1100[BX] | 21200H | 4C2AH |
| MOV AX,[BX][SI] | 20102H | 7856H |
| MOV AX,1100[BX][SI] | 21202H | 65B7H |
规律是:小端模式,低字节在低地址、高字节在高地址,读字时“低地址做低字节”。20100H 是 12H、20101H 是 34H,所以 [BX] 读出 3412H;20102H 是 56H、20103H 是 78H,所以 [BX][SI] 读出 7856H。第 5、7 条本质是同一组数据换了偏移算法,1100[BX] 算出来是 21200H,和直接寻址 [1200H] 命中同一单元,答案自然一样。命题人就是让你验证“不同寻址方式可以指向同一物理地址”。
2.3 也是同一种读法:30021H 字节单元是 34H、30022H 是 ABH、30023H 是 CDH、30024H 是 EFH,那么 30021H 字单元是 AB34H,30022H 字单元是 CDABH。字单元从偶数地址或奇数地址开始都可以,但读的时候一定从起始地址取两个字节,低地址那个是低位。
提示:画一张内存示意图再动笔,把地址标在左边、内容标在右边,读字时用方框圈住两个单元。这一步花十秒,能省下重新算一遍的三分钟。
5. 易错题盘点:五个年年有人栽的坑
这一章不按教材顺序走,专挑那些“看答案恍然大悟、考试时照样写错”的题。每一条都按“错在哪、为什么错、怎么答对”拆开,看完之后建议拿这几道原题再默写一遍。
5.1 MOV AX,TABLE 和 LEA AX,TABLE 搞混
错在哪:把两条指令当成一回事,都答成 1234H。
为什么错:没分清“取内容”和“取地址”。TABLE 是数据段 0032 单元的符号名,里面存着 1234H。MOV AX,TABLE是把这个单元里的内容搬进 AX,所以 AX=1234H;LEA AX,TABLE是把 TABLE 的偏移地址装进 AX,所以 AX=0032H。LEA 是 load effective address,它根本不访问内存,只做地址计算。
怎么答对:看到题目同时出现这两条指令,先问自己“问的是值还是地址”。写成一句话记:MOV 拿的是箱子里的东西,LEA 拿的是箱子的编号。如果题目再追问“那 MOV AX,OFFSET TABLE 呢”,答案是和 LEA 一样取偏移 0032H,因为 OFFSET 是伪指令运算,在汇编阶段就算出常数了。
5.2 字数组里按字节偏移取字,取出来高字节是垃圾
错在哪:教材 3.11 里 TABLE 依次存 10、20、30、40、50,ENTRY 存 3,执行MOV BX,OFFSET TABLE、ADD BX,ENTRY、MOV AX,[BX]后,很多人答 AX=001EH 或 0032H。
为什么错:ADD BX,ENTRY加的是 3,单位是字节,不是字。BX 指向 TABLE+3,而 TABLE 里每个数占两个字节,TABLE+3 正好落在第三个数的第二个字节上。从 TABLE+0 开始:0AH 00H、14H 00H、1EH 00H……TABLE+3 是 00H(偏移 3),TABLE+4 是 1EH(偏移 4),所以从 TABLE+3 读字,低字节是 00H、高字节是 1EH,AX=1E00H。
怎么答对:遇到数组题先画一行字节:每个字拆成“低字节、高字节”两格,再按偏移数格子。要取第 n 个元素,偏移应该是 (n-1)×2,这个乘法不能省。3.3 那道“把第 6 个字送 DX”的题同理,偏移是 (6-1)×2=10,三种寻址方式写法不同,但偏移量都是 10。
5.3 短转移的位移量被当成目标地址
错在哪:教材 3.7,0624H 处有一条两字节JMP SHORT OBJ,位移量给 27H、6BH、0C6H,不少人直接答目标地址就是 27H、6BH、0C6H,或者拿 0624H 直接加位移。
为什么错:短转移的位移量是相对量,基准是“这条指令的下一条指令的地址”,不是当前指令地址。JMP SHORT占两个字节,所以基准是 0624H+2=0626H。另外位移量是带符号数,C6H 作为 8 位补码是 -3AH,不是正的 198。
怎么答对:记住公式“目标 = 当前 IP + 指令长度 + 位移量”。三问分别是 0626H+27H=064DH、0626H+6BH=0691H、0626H-3AH=05ECH。第三问是向前跳,题目括号里已经提示“向上转移,负位移”,答题时把 C6H 换算成 -3AH 这一步写出来,分就稳了。
5.4 串操作忘了方向标志,REP 前缀用错
错在哪:教材 3.29 要求把字符串从左到右和从右到左各复制一遍,很多人两问都写CLD加REP MOVSB,或者从右到左时忘了把 SI、DI 指到末尾。
为什么错:串操作的方向由 DF 决定,CLD清方向标志表示地址递增,STD置位表示递减。从右往左复制必须STD,而且源和目的指针都要先指向最后一个字节,也就是ADD SI,20-1、ADD DI,20-1,否则第一次搬运就越界。另外REP和REPE/REPNE不能混用:REP只配合 MOVS/STOS/LODS,REPE/REPNE才配合 CMPS/SCAS。
怎么答对:写串操作前先定三件事——方向、指针初值、重复条件。3.30 把字符串里的&换成空格,用的是REPNE SCASB:先在 AL 里放&的 ASCII 码,CLD之后用 SCASB 逐字节比较,找到后DEC DI回退一格,再写空格。这里DEC DI是最容易漏的一步,SCASB 每次比较完会自动加一,不回退就写到下一个字节去了。
5.5 堆栈题只写 SP 变化,没标物理地址
错在哪:教材 3.13,(SS)=0FFA0H、(SP)=00B0H,压入 8057H 和 0F79H 再弹出一条,很多人只写 SP 从 00B0H 变成 00AEH 再变成 00ACH,图画不出来。
为什么错:PUSH 是“先减 SP、再存数据”,POP 是“先读数据、再加 SP”。压第一个字时 SP 减 2 得 00AEH,栈顶物理地址是 0FFA0H×16+00AEH=0FFAAEH,低字节 57H 存在 FFAAEH、高字节 80H 存在 FFAAF H。压第二个字时 SP=00ACH,79H 存 0FFAACH、0FH 存 0FFAADH。POP 一次后 SP 回到 00AEH,读出的值是 0F79H。
怎么答对:画图时左边写物理地址、右边写内容,把 SP 的指向画成箭头。堆栈是后进先出,压进去的顺序是 8057H、0F79H,弹出来的第一个必然是 0F79H。题目问“变化过程”,就要把三次 SP 值(00B0H、00AEH、00ACH、00AEH)都标出来,只写最终值算不完整。
6. 答题顺序:一套能按时做完并回查的流程
考点铺完了,最后说方法。这门课的卷子有个特点:前面的数制题分值低但耗时间,后面的指令序列题分值高但容易漏条件。我后来固定用三步定位法,先看题干里的动词,再定考点,最后套对应模板。
| 题干动词 | 考点 | 动笔前先写什么 |
|---|---|---|
| 转换、表示 | 数制、补码、ASCII | 先写位数和有无符号 |
| 运算、设置标志 | CF/OF/SF/ZF | 先判符号,再判进位 |
| 有效地址、物理地址 | 寻址方式 | 先列 EA 公式,再代值 |
| 编写指令序列 | 数据传送、运算 | 先写注释,再写指令 |
| 说明功能 | 程序阅读 | 先标每条指令后寄存器的值 |
第一步,拿到题先扫一遍,把“转换类”和“编程类”分开。数制转换限时一分钟一道,超过就跳过,回头再补。第二步,编程题一律先写注释再写指令,比如“取低位、加低位、取高位、带进位加高位”,注释写完,指令自然就出来了,还能拿步骤分。第三步,留十分钟回查三件事:标志位有没有写全、十六进制有没有漏 H、双字运算有没有用 ADC/SBB。
押题方向上,重点看三块:补码与无符号数的双重解释、CF 和 OF 的独立判定、基址变址加位移量的 EA 计算。这三块几乎每年都出,而且都能在教材前四章找到原题变体。串操作和堆栈属于“出一次就是大题”,复习时把 3.29、3.30、3.13 这三道题的代码默写一遍,比看十遍答案管用。
从那以后我每次做这类题,都强制走一遍“先判符号、再算地址、最后补标志位”的流程,宁可多写一行注释,也不在脑子里跳步。希望帮到你。
本文还有配套的精品资源,点击获取