2 yeruo yeruo 于 2015.06.18 20:44 提问

MOV AL,INPUT+2 ;这里为什么+2,谢谢

;功能:输入一个0~19的整数,输出其平方值

;作者:KDF5000

;时间:2012.11.9

.386

DATA SEGMENT USE16

SQUARE DW 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361 ;存入0~19的平方值便于查询

INPUT DB 8

DB ?

DB 8 DUP('$') ;次缓冲区用于存放输入的值

OUTPUT DB '$' ;此区存放平方值的输出

ERROR DB 'your input is incorrect!$'

MESSAGE DB 'please enter a number(0~19):$'

RESULT DB 0DH,0AH,' the result is:$'

EXITMES DB 0DH,0AH,'thank you for your use!',0DH,0AH,'$'

HUANHANG DB 0DH,0AH,'$'

DATA ENDS

STACK SEGMENT USE16 STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT USE16

ASSUME DS:DATA,CS:CODE,SS:STACK

BEGIN:

MOV AX,DATA

MOV DS,AX

 ;输出提示信息  
  LEA   DX,MESSAGE  
  MOV   AH,9  
  INT   21H  

  ; 输入数值  
  LEA  DX,INPUT  
  MOV  AH,10  
  INT  21H  

  ;如果输入空格则推出程序  
  MOV   AL,INPUT+2  ;***********************这里为什么+2
  CMP   AL,20H  
  JE    EXIT  

  ;取出输入的数值  
  LEA   SI,INPUT+2  
  MOV   AX,0  
  MOV   BL,10  
  MOV   CL,INPUT+1    ;记录循环的次数  

  ;将输入的值放到AX  

LOPA: MOV DL,[SI]

DEC CL

SUB DL,30H

MUL BL

ADD AX,DX

INC SI

CMP CL,0

JE NEXT

JMP LOPA

NEXT:

;如果输入的数字大于十九或者小于小于0报错

CMP AX,19

JG ERROR1

CMP AX,0

JB ERROR1

  MOV   BP,AX              ;将输入的数据作为变量  
  MOV   AX,SQUARE[EBP*2]   ;此时AX存放平方值  

  MOV   CL,10   ;设置除数  
  MOV   SI,OFFSET OUTPUT  

LOPB: ;次循环为把已经存入的平方值转换为十进值输出

DEC SI

DIV CL

ADD AH,30H

MOV [SI],AH

MOV AH,0

CMP AL,0

JNE LOPB

;输出结果提示

LEA DX,RESULT

MOV AH,9

INT 21H

;输出十进制平方值

MOV DX,SI

MOV AH,9

INT 21H

;输出换行

LEA DX,HUANHANG

MOV AH,9

INT 21H

;跳到开始继续输入

JMP BEGIN

ERROR1:

LEA DX,HUANHANG

MOV AH,9

INT 21H

  LEA  DX,ERROR  
  MOV   AH,9  
  INT   21H  

  LEA  DX,HUANHANG  
  MOV   AH,9  
  INT   21H  

  JMP   BEGIN  

EXIT:

LEA DX,EXITMES ;输出退出信息

MOV AH,9

INT 21H

  MOV   AH,4CH  
  INT   21H  

CODE ENDS

END BEGIN

2个回答

yeruo
yeruo   2015.06.18 20:44

;如果输入空格则推出程序

MOV AL,INPUT+2 ;***********************这里为什么+2
CMP AL,20H

JE EXIT

这里为什么+2啊。。。谢谢啦~~~

a1193561652
a1193561652   Rxr 2015.06.18 21:27

用int 21h接收字符串的缓冲区的格式是第一个字节是缓冲区大小,第二个字节是实际接收的大小,第三个字节起才是实际内容。所以INPUT+2才是实际接收内容的第一个字符。

a1193561652
a1193561652 回复yeruo: 主要是汇编语言比较偏,回答的人少,所以又是我。
2 年多之前 回复
yeruo
yeruo 恩恩。。明白了哈。。这次又是帮我解决的问题。。很有爱哈。。谢谢啦。。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片