10进制转16进制汇编程序

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档