华东理工大学 汇编第8讲.ppt
文本预览下载声明
汇编语言程序设计Assembly Language Programming 回顾已学习过的指令 MOV LEA LDS, LES, LFS, LGS MOVZX, MOVSX, CBW,CWD, CWDE, CDQ XCHG, BSWAP XLAT PUSH, POP, PUSHF, POPF ADD,ADC,INC,SUB,SBB,DEC,NEG,MUL,IMUL,DIV,IDIV LOOP AND, OR, XOR, NOT SHL, SHR, SAL, SAR, ROL, ROR, RCL, RCR CLC, STC, CMC, CLD, STD, CLI, STI NOT, HLT 第3章 数据运算与输入/输出 3.4 控制台输入/输出 汇编语言没有输入/输出指令。而是通过操作系统提供的系统服务程序或者通过基本输入/输出系统(BIOS)进行输入和输出。 只能输入/输出字符或字符串,而不能直接输入/输出一个整数。如要输入/输出一个整数,只能每次输入/输出该整数的一位数字。 3.4.1 输出 1. 输出单个字符 DL ← 待输出字符的ASCII码值 MOV AH, 02H INT 21H 2.输出字符串 3.十进制格式输出无符号字数据 只能直接输出字符或字符串,而不能直接输出一个整数。如要输出一个整数,只能每次输出该整数的一位数字. 方法:从高位到低位分别依次取出相应位上的数字并转换成数字字符,再调用操作系统的2号系统功能输出该数字。 关键问题:如何取得各位上的数字。 设X的值为12345 4.十六进制格式输出无符号字数据 方法1:除16保存余数(重复4次), 取出余数并转换为对应字符输出(重复4次) 方法2:通过移位指令,每次取出字数据的高4位(即一位16进制数字), 并将其转换为对应的字符ASCII,然后输出.重复上述过程4次. 关键问题:如何将16进制数字转换为对应字符的ASCII码? 设X的值为12500 DATA SEGMENT X DW 12500 C16 DW 16 HEX DB 0123456789ABCDEF DATA ENDS CODE SEGMENT ASSUME DS: DATA, CS: CODE START:MOV AX, DATA MOV DS, AX MOV CX, 4 MOV AX, X ONE: MOV DX, 0 DIV C16 PUSH DX LOOP ONE MOV CX, 4 LEA BX, HEX TWO: POP AX XLAT MOV DL, AL MOV AH, 2 INT 21H LOOP TWO MOV AX, 4C00H INT 21H CODE ENDS END START 设X的值为12500, 即 0011 0000 1101 0100 DATA SEGMENT X DW 12500 HEX DB 0123456789ABCDEF DATA ENDS CODE SEGMENT ASSUME DS: DATA, CS: CODE START:MOV AX, DATA MOV DS, AX MOV CX, 4 LEA BX, HEX ONE: PUSH CX MOV CL, 4 ROL X, CL MOV AX, X AND AX, 000FH XLAT MOV DL, AL MOV AH, 2 INT 21H POP CX LOOP ONE MOV AX, 4C00H INT 21H CODE ENDS END START 5. 二进制格式输出无符号字数据 方法1:除2保存余数(重复16次), 取出余数并转换为对应字符输出(重复16次)。 ——程序繁琐, 请同学们自行编程实现. 方法2:通过移位指令,每次取出字数据最高位送CF, 采用带进位的加法指令实现将二进制数字0或1转换为对应的字符ASCII,然后输出.重复上述过程16次. DATA SEGMENT X DW 12500 DATA ENDS CODE SEGMENT ASSUME DS: DATA, CS: CODE START:MOV AX, DATA MOV DS, AX MOV CX, 16 ;循环次数?(CX) ONE: MOV DL, 0 ;(DL)
显示全部