10进制转16进制汇编程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;--------------------------------------------;
;Name:十进制(-32768~32767)转换16进制汇编程序-;
;Desccription:输入一个十进制,程序转为该数的-;
;十六进制数从屏幕输出;
;Author:160409108 ;
;Date: 2011-11-13 ;
;--------------------------------------------;
DATA SEGMENT
BUF DW 7
DW ?
DW 8 DUP(0)
ORG 10H
DAT1 DW 12 DUP(0)
ORG 20H
FIRST DW ?
ORG 30H
SECOND DB ?
ORG 40H
THIRD DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H
LEA BX,BUF
LEA DI,DAT1
;------------------------------------------
;ASC码转换BCD码,若为负数推迟一位转码
;------------------------------------------
mov al,[BX+2]
CMP al,'-'
JNE SP1
INC BX
MOV AL,[BX] ;负数------判断实际输入位数,将DI指针指向相应位置
MOV CL,6
SUB CL,AL
MOV CH,0
LP3:
INC DI
INC DI
LOOP LP3 ;结束
JMP NEXT
SP1:
MOV AL,[BX+1] ;正数------判断实际输入位数,将DI指针指向相应位置MOV CL,5
SUB CL,AL
MOV CH,0
LP2:
INC DI
INC DI
LOOP LP2 ;结束
NEXT:
MOV AX,[BX+2] ;ASC转BCD码
SUB AX,30H
MOV [BX+2],AX
MOV AX,[BX+3]
SUB AX,30H
MOV [BX+3],AX
MOV AX,[BX+4]
SUB AX,30H
MOV [BX+4],AX
MOV AX,[BX+5]
SUB AX,30H
MOV [BX+5],AX
MOV AX,[BX+6]
SUB AX,30H
MOV [BX+6],AX
;-------------------------------------------
;每位分别存入10h,最后一位为符号值DW定义
;-------------------------------------------
MOV CX,[BX+1]
LP1:
MOV AL,[BX+2] ;将数据存入10H
MOV [DI],AL
INC BX
INC DI
INC DI
LOOP LP1
;MOV AL,[BX+3]
;MOV [DI+2],AL
;MOV AL,[BX+4]
;MOV [DI+4],AL
;MOV AL,[BX+5]
;MOV [DI+6],AL
;MOV AL,[BX+6]
;MOV [DI+8],AL
LEA BX,BUF
LEA DI,DAT1
MOV AL,[BX+2]
MOV [DI+10],AL ;若为负数则存负号ASC码,不是负数存第二个定义数;-------------------------------------------
;分别计算各个位的真实值存入20H DW定义BP
;-------------------------------------------
LEA BP,FIRST
LEA BX,SECOND
LEA DI,DAT1
MOV AX,[DI] ;万位
MOV CX,10000
MUL CX
MOV [BP],AX
MOV AX,[DI+2] ;千位
MOV CX,1000
MUL CX
MOV [BP+2],AX
MOV AX,[DI+4] ;百位
MOV CX,100
MUL CX
MOV [BP+4],AX
MOV AX,[DI+6] ;十位
MOV CX,10
MUL CX
MOV [BP+6],AX
MOV AX,[DI+8] ;个位
MOV CX,1
MUL CX
MOV [BP+8],AX
;-------------------------------------------
;分别相加存入30H DW定义BX
;-------------------------------------------
MOV AX,[BP]
ADD AX,[BP+2]
ADD AX,[BP+4]
ADD AX,[BP+6]
ADD AX,[BP+8]
MOV [BX],AX
;-------------------------------------------
;判定正负数,负数转补码
;-------------------------------------------
MOV AX,[DI+10]
CMP AX,'-'
JNE JP9
MOV AX,[BX]
NEG AX
MOV [BX],AX
JP9:
;-------------------------------------------
;判断每四位数值真值,<=或是>9,由此给定ASC码值;-------------------------------------------
LEA DI,THIRD
MOV AX,[BX]
AND AX,000FH
CMP AL,9