汇编作业(2006.5.19)

原创 2006年05月20日 12:22:00

DATA SEGMENT
 X DB 5, ?, 5 DUP(0)
 XX DW 0    ; 将X完成拼接操作存入XX (将XX当作要被转换的数据处理)
 Y DB 5 DUP(0)   ; 存转换后的10进制数
 STR1 DB 'INPUT 4 DIGITS: $'
 STR2 DB 0AH, 0DH, 'THE BCD CODE IS: $'  ; 实际打印出来的是BCD码表示的10进制数
 STR3 DB 0AH, 0DH, 'INPUT ERROR! TRY AGAIN! $'
DATA ENDS

STACK SEGMENT PARA STACK
 DW 20H DUP(0)
STACK ENDS

CODE SEGMENT
 ASSUME CS:CODE, DS:DATA, SS:STACK
BEGIN: MOV AX, DATA
 MOV DS, AX
 MOV DX, OFFSET STR1
 MOV AH, 09H
 INT 21H
 MOV DX, OFFSET X
 MOV AH, 0AH
 INT 21H
 MOV DI, OFFSET X
 INC DI
 MOV BL, [DI]
 CMP BL, 4   ; 检测输入是否为4位
 JE NEXT
 JMP ERROR
NEXT: INC DI
 PUSH DI
 CALL TES   ; 检测输入有效性并转化ASCII为数字
 POP DI
 CALL CHANGE   ; 将X按位拼接到XX中,使之成为长度为一个字的16进制数
 MOV DX, XX
 MOV DI, OFFSET Y
 MOV CX, 0H   ; 存放10进制数的位数
LOP2: MOV AX, DX   ; 被除数放入AX
 MOV DX, 0H  
 MOV BX, 10
 DIV BX    ; 除以10,余数在DX中,商在AX中
 XCHG AX, DX   ; 交换余数和商的位置
 ADD AL, 30H   ; 把余数转化为ASCII码
 MOV [DI], AL   ; 存余数
 INC DI
 INC CX    ; 位数计数器加1
 CMP DX, 0H    ; 如果商为0,则输出
 JNZ LOP2
 
 MOV DX, OFFSET STR2
 MOV AH, 09H
 INT 21H
LOP3: DEC DI    ; CX(10进制数的位数)控制此循环
 MOV DL, [DI]   ; 依次输出
 MOV AH, 02H
 INT 21H
 LOOP LOP3
 MOV DL, 'D'
 INT 21H
 JMP OVER

ERROR: MOV DX, OFFSET STR3
 MOV AH, 09H
 INT 21H
 
OVER: MOV AH, 4CH
 INT 21H
 
TES PROC    ; 检测与转换输入的子程序
 MOV CX, 4
LOP0:  MOV AX, 0
  MOV AL, [DI]      ; 判断输入的不同情况
  CMP AL, '0'
  JB ERROR
 CMP AL, 'f'
  JA ERROR
  CMP AL, '9'
  JBE PART1 
 CMP AL, 'A'
  JB ERROR
  CMP AL, 'F'
  JBE PART2
  CMP AL, 'a'
  JB ERROR
  CMP AL, 'f'
  JBE PART2

PART1:  AND AL, 0FH      ; 开始转化为数值
  MOV [DI], AL      ; 替换原始ASCII码
  JMP CONTINUE1 
PART2:  SUB AL, 07H
  JMP PART1

CONTINUE1:  INC DI
  LOOP LOP0
 RET
TES ENDP

CHANGE PROC
 MOV BX, 0
 MOV CX, 3   ; 总共移位3次,或运算拼接4次
LOP1: PUSH CX
 OR BL, [DI]   
 MOV CL, 4
 SHL BX, CL   ; 左移4个2进制位(1个16进制位)
 INC DI
 POP CX
 LOOP LOP1
 OR BL, [DI]   ; 多进行或运算一次
 
QUIT: MOV XX, BX   ; 拼接完成存入BX
 RET
CHANGE ENDP

CODE ENDS
END BEGIN

相关文章推荐

汇编作业

蜂鸣器汇编: .global _start_start:LDR R0,=0XE02000A0LDR R1,[R0]BIC R1,R1,#(0XF)ORR R1,R1,#(0X1)STR R1,[R0]...
  • Mce_19
  • Mce_19
  • 2016年11月23日 20:55
  • 153

汇编_8086作业

D:/www_local/asm/test/test10.asmassume cs:codesg,ds:datasg datasg segment db 'welcome to masm!',0 ;...

FZU汇编作业 实验(五)

1、上机题目:将从键盘输入的N个无符号数保存到数组DAT ,找出N个无符号数中的偶数存放到数组P,统计并在终端上显示数组P的数据个数no。              DAT  DW   X1,……,X...

看8086汇编 书上的一个小作业 键盘中断例程编写

;任务:在屏幕中间依次显示‘a'~’z' 并可以让人看清。在显示的过程中 按下Esc后,改变显示的颜色 assume cs:code ;栈 stack segment db 128 dup (0...

汇编(输入成绩20个,进行分类,别人的作业,我帮着做的)

s5为60分以下,s6为60-69,依这个类推 assume cs:code,ds:data,ss:stack data segment inform db 0dh,0a...

汇编:输入姓名和成绩排序(别人的作业,自己随便写写的,没用传统的排序算法)

;我这是计算成绩从高到低的排序,因为我假设的情况是一个人一个成绩, ;所以如果你要的是一个人几个成绩进行排序; ;你就修改我下面的数据结构,再按照我自己编写的算法进行循环就行了 ;很简单的,嫌麻烦...

这是我的汇编作业

要求: 完成下列操作,用WORD文档记录结果并上交 (操作结果的记录可使用截屏: ALT+PRINT SCREEN)   重要说明: 1.指令中各种内存地址的写法为: 地址>写法: 段地址...

反汇编小作业

0x00 问题描述给定一个 bin 文件,生成对应的 asm 文件。 这里我们只写了 MOV 指令的反汇编代码,具体过程如下:0x01 生成 bin 文件输入来自 bin 文件,这里为了方便,我们用...

汇编作业 宏指令运用实验

  • 2011年11月08日 13:54
  • 472KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编作业(2006.5.19)
举报原因:
原因补充:

(最多只允许输入30个字)