汇编语言 帮帮看看哪里错了 作业题 从键盘输入一个十六进制数将其转化为十进制并输出

qdwcool 2014-12-04 07:44:44
这是我编的程序 请大神们看看哪里错了哈 本人比较菜 请多多指教

DATA SEGMENT
DATA ENDS
STACK SEGMENT
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AH,1
INT 21H
CMP AL,40H
JL L1
SUB AL,30
PUSH AX
AND AL,0FH
MOV [SI],AL
JMP OUTPUT
POP AX
AND AL,0F0H
MOV DL,16
MUL DL
ADD AL,[SI]
JMP OUTPUT
L1:SUB AL,30
JMP OUTPUT
OUTPUT:MOV DL,AL
MOV AH,02H
INT 21H
CODE ENDS
END START
...全文
2295 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
HYG0817 2014-12-24
  • 打赏
  • 举报
回复
楼主,你好,看了你的题目,我根据题意,把整个程序重写了一遍。供参考! DATA SEGMENT PLEASE DB 'PLEASE INPUT(0-F):',0DH,0AH,24H ;提示信息,意思是请输入0-F之间的十六进制数。 LERROR DB 'INPUT ERROR,PLEASE RESET INPUT:',0DH,0AH,24H;错误提示信息,由于本人英文水平不佳,如有单词错误,各位见笑了! HEX1 DB ? ;这个变量用于存放输入的值(<=9),由于0-9的ASCII值十六进制和十进制是一样的,所以接收输入的数后,可以直接存放在这,用于显示。 HEX2 DB ?,?,0DH,0AH,24H;此变量用于存放接收到的A-F的ASCII,并经转化为十六进制数以后,再转化为两位十进制的值(最终存放的是两位十进制数的ASCII值) CS1 DB 10,1 ;除数,用于A-F之间的十六进制数转化为两位十进制数。 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AH,9 LEA DX,PLEASE INT 21H ;为了界面友好,首先显示提示信息。 INPUT: MOV AH,1 INT 21H ;楼主,你懂的! CMP AL,'0' ;这一小段用于检测输入的数是否超范围。 JB ERROR ;小于0,转错误提示,并要求重新输入。 MOV AH,AL CMP AL,'9' JBE SAVE1 ;大于零,且小于等于9,直接将ASCII码存放于HEX1变量。 AND AL,0DFH ;将输入的小写转化为大写。相当于SUB AL,20H CMP AL,'A' JB ERROR ;小于A,转错误处理。 MOV AH,AL SUB AH,'A'-10 ;以上两行,假设为A-F,则将ASCII形式转为十六进制数。 CMP AL,'F' JBE SAVE2 ;大于A,小于F,转保存到HEX2变量处理。 ERROR: MOV AH,2 MOV DL,0AH INT 21H MOV DL,0DH INT 21H ;你懂的,这是换行回车。 MOV AH,9 LEA DX,LERROR INT 21H JMP INPUT ;这一小段,显示错误提示信息,并转到开始处,要求重新输入。 SAVE1: MOV HEX1,AH MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H MOV DL,HEX1 INT 21H ;这一小段为显示0-9之间的十进制数的ASCII码,显示完退出程序。 JMP EXIT SAVE2: PUSH AX ;先保存AX的值 MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H MOV CX,2 ;设置循环次数为2次 LEA SI,CS1 ;将除数的首地址送出SI LEA DI,HEX2 ;将要存入的十进制ASCII码的变量的首地址送入DI POP AX ;恢复AX的值 MOV AL,AH ;将十六进制数送入AL,作被除数 ZHW10: XOR AH,AH DIV BYTE PTR[SI] ADD AL,30H MOV [DI],AL INC SI INC DI MOV AL,AH LOOP ZHW10 ;这一小段,用于将十六进制数转化为十进制数并将每一位变为ASCII码后存入变量HEX2 MOV DX,OFFSET HEX2 MOV AH,9 INT 21H ;以ASCII码形式显示A-F转化后的十进制数。 EXIT: MOV AH,4CH INT 21H CODE ENDS END START
zara 2014-12-05
  • 打赏
  • 举报
回复
引用
用AND指令取完十六进制的高位后 想将高位存到存储器里 请问该如何操作
是要将高位转到低位吧,需要用移位操作指令如 shr AL, CL ; CL=4 了。

至于最上面的问题,不大好回答。这样的题目,要看出现的场景,题目的目的具体是想考察哪些点,就需要用相应的方法来实现。
SI 没有设置初值,相应的 DS: 也没有,这么直接使用了,会破坏 psp 的,后果难说。
那两个 sub AL, 30 里的 30 应该是 30h 吧。
输出部分,是以字符格式输出 DL 的,不是以数值,没有内容的转换功能,所以需要加上 30h 的。
输入了 'A' 或以上的字符,只输出了一位吧,应该有两位的。
qdwcool 2014-12-04
  • 打赏
  • 举报
回复
我有个疑问哈 我用AND指令取完十六进制的高位后 想将高位存到存储器里 请问该如何操作
内容概要:本文围绕“基于灵敏度分析的有源配电网智能软开关优化配置”展开研究,系统阐述了利用改进灵敏度分析方法对智能软开关(SOP/SNOP)在含分布式电源的配电网中的选址与定容问题进行建模与求解的技术路径。研究以IEEE 33节点系统为仿真平台,结合Matlab代码实现,深入探讨了三端口智能软开关的运行特性及其在降低网络损耗、改善电压分布、提升系统灵活性和运行经济性方面的关键技术作用。文中详细构建了灵敏度指标的数学模型,设计了优化配置的求解算法流程,并设置了多场景仿真对比实验以验证所提方法的有效性和优越性。此外,该资源还融合了光伏储能、虚拟同步发电机(VSG)并网、需求响应调度等前沿技术模块,形成了支持多场景协同仿真的综合性技术体系。; 适合人群:具备电力系统、电气工程及其自动化等相关专业背景,熟悉Matlab/Simulink仿真环境,从事配电网优化、分布式能源集成、主动配电网规划或智能电网技术研究的研发人员及硕士、博士研究生。; 使用场景及目标:①掌握智能软开关在有源配电网中的优化配置理论与方法;②学习基于改进灵敏度分析的电网关键设备选址定容策略;③开展含高比例分布式电源的配电网潮流优化与运行仿真研究;④复现高水平期刊论文中的优化模型与算法,并拓展应用于实际工程问题的求解。; 阅读建议:此资源以科研论文复现为核心导向,建议读者结合提供的Matlab代码逐模块调试运行,重点关注灵敏度因子的计算逻辑、优化变量的设置方式以及各类运行约束的处理机制,同时参考文中列出的完整资源目录获取配套模型与数据,实现从理论推导到仿真实践的全流程贯通。
内容概要:本文详细介绍了光伏储能虚拟同步发电机(VSG)并网仿真模型的Simulink实现方法,系统研究了光伏发电与储能系统融合VSG技术并入电网的动态特性与控制策略。通过构建完整的VSG控制模块,模拟其在并网过程中的虚拟惯性响应、频率调节能力和有功无功功率支撑特性,验证了该系统在增强电网稳定性、提升新能源并网适应性方面的有效性。模型全面涵盖光伏出力特性、储能系统充放电管理、VSG有功-无功解耦控制、下垂控制机制以及并网点动态响应等关键环节,并通过多种工况下的仿真分析,评估系统在不同运行条件下的动态性能与鲁棒性。; 适合人群:具备电力系统、新能源发电、自动控制等相关专业背景,熟悉Matlab/Simulink仿真环境,从事新能源并网、微电网控制或电力电子系统研究的科研人员、工程技术人员及研究生。; 使用场景及目标:①深入理解光伏储能系统如何通过VSG技术模拟同步发电机的惯性和阻尼特性以支持电网稳定;②掌握虚拟惯量控制、下垂控制等VSG核心控制策略在Simulink中的建模、参数设计与实现方法;③为新型电力系统中新能源并网的动态仿真、稳定性分析及控制策略优化提供可靠的模型基础和技术参考。; 阅读建议:建议结合所提供的仿真模型进行逐步操作与参数调试,重点关注VSG控制环路的结构设计、控制器参数整定及其对系统动态性能的影响,同时可将该模型拓展应用于多机并联、微电网孤岛/并网切换、多能源协同控制等更复杂的系统场景中进行进阶研究。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧