将结果打印到屏幕上 [英] Print result to the screen

查看:94
本文介绍了将结果打印到屏幕上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿伙计们,

我是汇编程序的新手,我的第一个任务是编写代码,用户号码在00到99之间询问并自行乘以,例如用户输入77,所以77 * 77 = 5929

i相信我无法打印回结果,这是我的代码到目前为止:





**更新 - 我修复了我的代码,现在正在工作

Hey guys,
I'm new to assembler and my first assignment is to write code that ask from the user number between 00 to 99 and multiply by himself, for example the user enter 77, so 77*77=5929
i believe i'm having trouble to print back the result, This is my code so far :


**Update - i fixed my code and now its working


; lab34_2.asm
;
    .MODEL SMALL
    .STACK 100h
    .DATA
Var1      DW ?
Res       DD ?
Ten       DW 10
PromptStr DB 'Please Enter Number (from 00 up to 99):',13,10,'$'
ResultStr DB 13,10,'Sqr(xx) =  xxxx',13,10,'$'
                            ;
     .CODE
     MOV AX,@DATA   ; DS can be written to only through a register
     MOV DS,AX      ; Set DS to point to data segment
     MOV AH,9
     MOV DX,OFFSET PromptStr
     INT 21h
;
;         Get the num , first digit
     MOV AH,1   
     INT 21h    
     MOV ResultStr[6],AL 
     SUB AL,'0'    
     MOV AH,0       
     MUL Ten       
     MOV Var1,AX
     MOV AX,0      
;          second digit
     MOV AH,1
     INT 21h
     MOV ResultStr[7],AL
     SUB AL,'0'
     MOV AH,0
     ADD AX,Var1
     MOV Var1,AX
;       Sqr
     MUL VAR1     ; DX:AX = VAR1*VAR1
     MOV WORD PTR Res,AX
     MOV WORD PTR Res+2,DX
;       Set res in the text
     DIV Ten
     ADD DX,'0'
     MOV ResultStr[16],DL
     MOV DX,0
;
    DIV Ten
     ADD DX,'0'
     MOV ResultStr[15],DL
     MOV DX,0
;
     DIV Ten
     ADD DX,'0'
     MOV ResultStr[14],DL
     MOV DX,0
;
     DIV Ten
     ADD DX,'0'
     MOV ResultStr[13],DL
     MOV DX,0
;
     MOV AH,9
     MOV DX,OFFSET ResultStr
     INT 21h
;
     MOV AH,4Ch       ; Set terminate option for int 21h
     INT 21h       ; Return to DOS (terminate program)
     END

推荐答案

'
ResultStr DB 13 10 ,'Sqr(xx)= xxxx', 13 10 ,'
' ResultStr DB 13,10,'Sqr(xx) = xxxx',13,10,'


'
;
.CODE
MOV AX ,@ DATA ; DS可写入仅通过注册
MOV DS AX ; 将DS设置为指向数据段
MOV AH 9
MOV DX ,OFFSET PromptStr
INT 21h
;
; 获取num,第一位数
MOV AH 1
INT 21h
MOV ResultStr [ 6 ], AL
SUB AL ,'0'
MOV AH 0
MUL 十美元
MOV Var1, AX
MOV AX 0
; 第二位
MOV AH 1
INT 21h
MOV ResultStr [ 7 ], AL
SUB AL ,'0'
MOV AH 0
ADD AX ,Var1
MOV Var1, AX
; Sqr
MUL VAR1 ; DX:AX = VAR1 * VAR1
MOV WORD PTR Res, AX
MOV WORD PTR Res + 2, DX
; 在文本中设置res
DIV 十美元b $ b ADD DX ,'0'
MOV ResultStr [ 16 ], DL
MOV DX 0
;
DIV 十美元
ADD DX ,'0'
MOV ResultStr [ 15 ], DL
MOV DX
0
; < span class =code-comment>
DIV 十美元
ADD DX ,'0'
MOV ResultStr [ 14 ], DL
MOV DX 0
;
DIV 十美元b $ b ADD DX ,'0'
MOV ResultStr [ 13 ], DL
MOV DX 0
;
MOV AH 9
MOV DX ,OFFSET ResultStr
INT 21h
;
MOV AH ,4Ch ; 设置终止int 21h的选项
INT 21h ; 返回DOS(终止程序)
END
' ; .CODE MOV AX,@DATA ; DS can be written to only through a register MOV DS,AX ; Set DS to point to data segment MOV AH,9 MOV DX,OFFSET PromptStr INT 21h ; ; Get the num , first digit MOV AH,1 INT 21h MOV ResultStr[6],AL SUB AL,'0' MOV AH,0 MUL Ten MOV Var1,AX MOV AX,0 ; second digit MOV AH,1 INT 21h MOV ResultStr[7],AL SUB AL,'0' MOV AH,0 ADD AX,Var1 MOV Var1,AX ; Sqr MUL VAR1 ; DX:AX = VAR1*VAR1 MOV WORD PTR Res,AX MOV WORD PTR Res+2,DX ; Set res in the text DIV Ten ADD DX,'0' MOV ResultStr[16],DL MOV DX,0 ; DIV Ten ADD DX,'0' MOV ResultStr[15],DL MOV DX,0 ; DIV Ten ADD DX,'0' MOV ResultStr[14],DL MOV DX,0 ; DIV Ten ADD DX,'0' MOV ResultStr[13],DL MOV DX,0 ; MOV AH,9 MOV DX,OFFSET ResultStr INT 21h ; MOV AH,4Ch ; Set terminate option for int 21h INT 21h ; Return to DOS (terminate program) END


这篇关于将结果打印到屏幕上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆