百科狗-知识改变命运!
--

一个简单的编写汇编语言程序的问题~求高手帮忙

泡在奶味里1年前 (2023-12-21)阅读数 7#综合百科
文章标签数字转换成

; 本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

CR equ 000DH

LF equ 000AH

KB_Back equ 0008H

KB_ESC equ 001BH

; -----------------------------------------

; 功能:输出一个字符

; 入口:dl=要显示的字符

enter_Chr proc Near

push ax

mov ah,02h

int 21h

pop ax

ret

enter_Chr endp

; -----------------------------------------

; 功能:显示指定地址(Str_Addr)的字符串

; 入口:

; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr

; 用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

一个简单的编写汇编语言程序的问题~求高手帮忙

int 21h

EndM

; -----------------------------------------

; 功能:取光标位置

; 入口:无

; 出口:DH=行号,DL=列号

GetCursor Proc Near

PUSH AX

PUSH BX

PUSH CX

XOR BX,BX

MOV AH,3

INT 10H

MOV Cursor_Row,DH

MOV Cursor_Col,DL

POP CX

POP BX

POP AX

RET

Cursor_Row DB ?

Cursor_Col DB ?

GetCursor EndP

; -----------------------------------------

; 功能:置光标位置

; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)

SetCursor Proc Near

PUSH CX

PUSH BX

PUSH AX

MOV DH,Cursor_Row

MOV DL,Cursor_Col

XOR BX,BX

MOV AH,2

INT 10H

POP AX

POP BX

POP CX

RET

SetCursor EndP

; -----------------------------------------

; 功能:输出回车换行

enter_CTLF proc Near

push ax

push dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop ax

ret

enter_CTLF endp

; -----------------------------------------

; 功能:键盘输入一个N位的十进制数字,

; 用逻辑和移位指令将其转换成二进制数并保存在指定的内存单元。

; 入口:N=数字位数;di=保存输入的数字首地址

; 出口:转换后的二进制数保存在di所指的单元

Input_Digit Proc Near

push dx

push cx

push bx

push di

lea di,@@Save_Tmp

push di

cld

mov cx,N

push cx

@@Input: call GetCursor ;取光标位置

mov ah,1 ;从键盘接受一个字符

int 21h

cmp al,KB_ESC

jnz $+12

mov Mark_Bit,al

pop cx

pop di

pop di

pop bx

pop cx

pop dx

ret

cmp al,CR ;若键入的是回车,已经键入的数字不足N位

jz @@ASC_Dec ;转去处理已经键入的数字

cmp al,KB_Back

jz @@KBBack ;若是回空键,重新输入

cmp al,'0'

jb @@KB_Back ;若低于数字'0',重新输入

cmp al,'9'

ja @@KB_Back ;若低于数字'9',重新输入

jmp @@Save_Dig

@@KBBack: dec Cursor_Col

inc cx

dec di

@@KB_Back: call SetCursor ;置光标位置

jmp @@Input

@@Save_Dig: and al,0fh ;转换成二进制数

stosb ;保存

loop @@Input ;接受下一个数字

@@ASC_Dec: mov ax,cx

pop cx

pop si

sub cx,ax ;实际输入的数字位数

xor dx,dx

xor ax,ax

jcxz @@Save_Ret ;若直接回车,没有输入任何数字,按输入'0'处理

dec cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数

mov bx,10

@@Mul_Ten: lodsb

cbw

add ax,dx

mul bx

mov dx,ax

loop @@Mul_Ten

lodsb

cbw

add ax,dx

@@Save_Ret: pop di

stosw

pop bx

pop cx

pop dx

mov Mark_Bit,0

ret

@@Save_Tmp db 16 dup(?)

Input_Digit EndP

; -----------------------------------------

; 功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码

; 入口:AL

; 出口:AL=转换后的ASCII码

AL_ASCII Proc Near

cmp al,10 ;AL

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)