-->100分,在线求教:怎么用汇编实现超级简单的a+b=c,然后输出?

浩曦 2003-10-16 12:26:20
你好:
首先我用人格担保我提的问都不是作业题.我只是在学汇编事想自己多写点东西.当然要从小的写起.可是我自己认为要输入A,B,很麻烦,看中断调用说明好象得到的是ASCII码啊,怎么进行数值运算呢?

我的意思是程序运行,显示提示信息:"Please Input a:"
然后我们输入,再提示:"Please Input b:"
最后输出"The result c is:"

在C语言里这完全不是问题,可汇编怎么办呢?谢谢各位,还请大家帮帮我
...全文
180 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogo00 2003-10-17
  • 打赏
  • 举报
回复
这个问题在C语言里的确不是个问题,但用汇编语言虽然麻烦,但也不是没有办法,考虑到ASCII和数位的限制,就可以解决。
Goldbach 2003-10-17
  • 打赏
  • 举报
回复
TEMPIO.INC 是这样的:(放在同一目录下, 扩展名为inc)

READ_DIGIT PROC NEAR
PUSH BX
PUSH CX
PUSH DX

MOV BX,10
XOR AX,AX

_READ_CHAR:
PUSH AX
MOV AH,01H
INT 21H
CMP AL,0DH
JE _END
SUB AL,'0'
XOR CH,CH
MOV CL,AL
POP AX
MUL BX
ADD AX,CX
JMP _READ_CHAR

_END:
POP AX
POP DX
POP CX
POP BX
RET

READ_DIGIT ENDP

PRINT_DIGIT PROC NEAR
XOR CX,CX
MOV BX,10
_CALC_DIGIT:
XOR DX,DX
DIV BX
PUSH DX
INC CX
CMP AX,0
JNE _CALC_DIGIT

_PRINT:
POP DX
MOV AH,02H
ADD DL,'0'
INT 21H
LOOP _PRINT

MOV AH, 02H
MOV DL, ' '
INT 21H
RET
PRINT_DIGIT ENDP

PRINT_SIGNED_DIGIT PROC NEAR
PUSH DX
PUSH AX
CMP AX,0
JGE _S_PRINT
PUSH AX
MOV AH,02H
MOV DL,'-'
INT 21H
POP AX
NEG AX
_S_PRINT:
CALL PRINT_DIGIT
POP AX
POP DX
RET
PRINT_SIGNED_DIGIT ENDP
Goldbach 2003-10-17
  • 打赏
  • 举报
回复
我这里有一个可以作加法 减法 乘法的代码
.model small
.stack 100h

.data
Message1 db 0Dh, 0Ah,'First number : ' , '$',0
Message2 db 0Dh, 0Ah,'Second number : ', '$',0
Message3 db 0Dh, 0Ah,'Add : ', '$', 0
Message4 db 0Dh, 0Ah,'Subtract : ','$',0
Message5 db 0Dh, 0Ah,'Multiply : ','$',0

value1 dw ?
value2 dw ?

.code

INCLUDE TEMPIO.INC

main proc

mov ax, @data
mov ds, ax

_READ_NUM: ; Read 2 decimal from standard input.
MOV AH, 09H
MOV DX, OFFSET MESSAGE1
INT 21H
call READ_DIGIT
MOV BX, AX
MOV AH, 09H
MOV DX, OFFSET MESSAGE2
INT 21H
CALL READ_DIGIT

PUSH AX
PUSH BX
PUSH AX
PUSH BX
PUSH AX
PUSH BX

ADDITION:
MOV AH, 09H
MOV DX, OFFSET MESSAGE3
INT 21H
POP BX
POP AX
ADD AX, BX
CALL PRINT_SIGNED_DIGIT

SUBTRACT:
MOV AH, 09H
MOV DX, OFFSET MESSAGE4
INT 21H
POP BX
POP AX
SUB BX, AX
MOV AX, BX
CALL PRINT_SIGNED_DIGIT

MULTIPLY:
MOV AH, 09H
MOV DX, OFFSET MESSAGE5
INT 21H
POP BX
POP AX
IMUL BX
CALL PRINT_SIGNED_DIGIT

_END:
mov ax,4C00h
int 21h

main endp
end main
浩曦 2003-10-17
  • 打赏
  • 举报
回复
高人们,谢谢了先.分已经放出,笑纳.....及时结帖给分是一种美徳!
yqzq 2003-10-17
  • 打赏
  • 举报
回复
实在瞌睡的不行了,所以没有检查,格式也比较乱,见凉

只能处理 8位数相加 ,不过其他位数是同原理

yqzq 2003-10-17
  • 打赏
  • 举报
回复
.MODEL SMALL
.STACK 200H
.DATA

MSG DB 'INPUT BYTE DATA',10,13,'$'



.CODE

.STARTUP:
START:
MOV AX,@DATA
MOV DS,AX

;DISPALY MSG

MOV DX,OFFSET MSG
MOV AH,09H
INT 21H


;GET BYTE A
MOV AH,01H
INT 21H
MOV CL,AL

;DISPALY '+'

MOV AH,02H
MOV DL,'+'
INT 21H

;GET BYTE B
MOV AH,01H
INT 21H


MOV AH,0
ADD AL,CL
AAA
ADD AX,3030H
MOV BX,AX



;DISPALY RESULT

MOV AH,02H
MOV DL,'='
INT 21H

MOV AH,02H
MOV DL,BH
INT 21H
MOV AH,02H
MOV DL,BL
INT 21H

;GET BYTE B


.EXIT

END START



END
浩曦 2003-10-16
  • 打赏
  • 举报
回复
是啊,有朋友知道怎么转换吗?
LTrapCN 2003-10-16
  • 打赏
  • 举报
回复
我也觉得显示是难点,因为那是最麻烦的。
而且将输入的ascii码转成十六进制数进行运算后再转成ascii码输出显示也是难点。
浩曦 2003-10-16
  • 打赏
  • 举报
回复
哦?就用最简单的,不带符号,8位或者16位以内吧.怎么就不难呢?我觉得这些不是重点吧?我认为如何从键盘读取,而且转化成数值编码,最后又把数值编码变成ASCII码输出才是难点吧?也不知道对不对?
zuolihua 2003-10-16
  • 打赏
  • 举报
回复
a,b的最大值是多少,考不考虑带符号数,考不考虑小数,把这些问题想清楚了,问题就不难了

21,458

社区成员

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

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