文档详情

第三次汇编实验报告.doc

发布:2016-08-12约2.6千字共8页下载文档
文本预览下载声明
实验报告 实验目的 熟悉新学习的汇编指令 尝试自己写一些可以完整运行的汇编代码 实验内容(主要是PPT上的例子和书本上的一些代码段,包括上次已经做过的实验,但感觉指令依旧不太熟的再做一遍) CMP比较后标志寄存器的状态 无符号数的比较好比较 若AX=BX,则ZF位为1,即ZR状态 若AXBX,则CF=0,即NC状态 若AXBX,则CF=1,即CY状态 BCD码运算调整指令复习 压缩BCD码加法十进制调整指令DAA,调整在运算之后进行,若AL的第四位9或AF=1, AL=AL+06H,且AF=1,若AL的高四位9或CF=1,则AL=AL+60H,CF=1 非压缩BCD码加法十进制调整指令AAA,也在运算之后调整,若AL中第四位9或者AF=1,则AH=AH+1,AF=1,AL中的高四位屏蔽,CF=AF. 压缩BCD码减法十进制调整指令DAS,运算后调整,若AL低四位9或者AF=1(即高位借给低位时多按十六进制多借了6,现在减去这个多借的6),,则AL=AL-06,AF=1,若AL中的高四位9或者CF=1,则AL=AL-60,CF=1(同理,比AL高的位给AL借时多给了60H) 非压缩BCD码减法调整指令AAS,运算后调整,若AL中低四位9或AF=1(减法中AF表示的意思有点悬念,是否高8位向低8位借位后AF就变成1,问一问),则AL=AL-06,AH=AH-1,AF=1,屏蔽AL高四位,CF=AF.(非压缩BCD码以八位存放一个十进制数,一般前四位都为空,,进行运算后也不可能大于9,所以只需要考虑低四位,比AL高的位借一过来由于十六进制和十进制的差异多了6H,所以要减去6H, 最后的结果是有问题的,为什么? 非压缩BCD码乘法的十进制调整指令AAM 将运算结果得到的十六进制转化为十进制,AH=(AX)/0A,AL=AX%0A 非压缩BCD码除法的十进制调整指令AAD 这条指令放在除法之前,AL=(AH*10)+AL,AH=0 逻辑运算和移位指令. AND AX,AX和OR AX,AX都可以让CF和OF清零 将某个寄存器清零可以用XOR XX,XX TEST用来测试某些位的状态。 使用移位指令时,若移动次数为1,则写1,不然就用CL 将BUF1开始存放的四个压缩BCD码转换为ASCII码存放在BUF2开头的单元中 DATA SEGMENT BUF1 DB 12H,34H,56H,78H BUF2 DB 4 DUP(0) DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX LEA SI,BUF1 LEA DI,BUF2 MOV CX,4 NEXT:MOV AL,[SI] MOV BL,AL AND AL,0FH OR AL,30H MOV [DI],AL INC DI MOV AL,BL PUSH CX MOV CL,4 SHR AL,CL OR AL,30H MOV [DI],AL INC DI INC SI POP CX DEC CX JNZ NEXT HLT MOV AX,4CH INT 21 CODE ENDS END START 串操作指令 串传送指令使用的尝试 DATA1 SEGMENT MEM1 DB 200 DUP(2) DATA1 ENDS DATA2 SEGMENT MEM2 DB 200 DUP(0) DATA2 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA1,ES:DATA2 START: MOV AX,DATA1 MOV DS,AX MOV AX,DATA2 MOV ES,AX LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT MOV AX,4CH INT 21H CODE ENDS END START 这段代码的功能是将MEM1开始的200个字节存储单元的内容传送到MEM2开始的200个字节的存储单元中 结果如下图所示 当然,上面的MOVSB指令可以用movs BYTE PTR[DI],[SI]的方式表示,运行结果一样。 SCAS的使用 DATA SEGMENT STR DB I LOVE CHINA COUNT EQU $-STR F DW -1 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:
显示全部
相似文档