- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
指令系统应用举例
[书例 2.2] P63
MOV SI , OFFSET BUFFER1 ; 源数据块首地址的偏移量送SI
MOV DI , OFFSET BUFFER2 ; 目标首址的偏移量送DI
MOV CX , 200 ; 数据块长度送CX
NEXT: MOV AL , [SI] ; 源数据块中一个字节传到AL
MOV [DI] , AL ; AL 传送到目标地址
INC SI ; SI 加1
INC DI ; DI加1
DEC CX ; CX减1
JNZ NEXT ; 如不等于0 , 转移到NEXT
……
[书例 2.3] P67
MOV BP , SP ; 设置基址指针寄存器
PUSH AX ; 推入AX , SP减2
PUSH BX ; 推入BX , SP减4
PUSH CX ; 推入CX , SP减6
……
MOV AX , [BP-2] ; 恢复AX原来的内容
MOV BX , [BP-4] ; 恢复BX原来的内容
MOV CX , [BP-6] ; 恢复CX原来的内容
ADD SP , 6 ; 恢复SP原来的内容
CX , 5 ; 循环次数送CX
SI , 0 ; SI初值为0
; 清进位标志CF
AL , DATA2 [SI] ; 取一个字节加数
DATA1 [SI] , AL ; 与被加数相同且送回内存区
INC SI ; SI加1 , 指向下一字节
DEC CX ; 循环次数减1
JNZ LOOPER ; 如不为0 , 转LOOPER
…… ; 如为0 , 运算结束
[书例2.6] P75
要求计算两个多字节十六进制数之和: 3B74AC60F8H+20D59E36C1H=?
MOV
MOV CLC
LOOPER: MOV ADC
LEA SI , STRING1 LEA BX , STRING2 LEA DI , SUM
MOV CX , 4
CLC
NEXT: MOV AL , [SI] ADC AL , [BX] AAA
MOV [DI] , AL
; (SI) 被加数地址指针 ; (BX) 加数地址指针
; (DI) 结果地址指针
; (CX) 循环次数
; 清进位标志CF
; 取一个字节被加数 ; 与加数相加
; ASCII调整(非压缩) ; 送存
[书例2.7] P77
计算4609+3875= ? 设被加数和加数的每一位数都以ASCII码 形式存放在内存中 , 低位在前 , 高位在后。
; SI加1
; BX加1
; DI加1
; 循环次数减1
; 如不为0 , 转NEXT
; 如为0 , 结束运算
INC
INC INC DEC JNZ
SI
BX
DI
CX
NEXT
[书例2.8] P81
内存数据段存放了100个带符号数 , 首地址为AREA1 , 要求 将各数取绝对值后存入以AREA2为首址的内存区 。
LEA SI , AREA1 ; (SI) 源地址指针
LEA DI , AREA2 ; (DI) 目标地址指针
MOV CX , 100 ; (CX) 循环次数
CHECK: MOV AL , [SI] ; 取一个带符号数到AL
OR AL , AL ; AL内容不变 , 但使之影响标志
JNS NEXT ; 若 (SF)=0 , 则转NEXT
NEG AL ; 否则求补
NEXT:
文档评论(0)