【问题标题】:Read elements of an array from keyboard Assembler从键盘汇编器中读取数组的元素
【发布时间】:2016-03-31 19:43:52
【问题描述】:

我是汇编语言的新手,在 TASM 上工作,需要按升序对数字进行排序。代码很简单,但我必须从键盘读取数组元素的数量,然后也从键盘插入它们。问题是您键入的所有内容都以 ASCII 代码显示,而我对转换一无所知。如何阅读?

提前谢谢你!

对 5 个数字进行排序

.MODEL SMALL 
.DATA 
NUM DW 42H,34H,26H,17H,09H 
LEN EQU 05H

.CODE 
START: 
MOV AX,@DATA 
MOV DS,AX 
MOV BX,LEN-1  ;Initialize BX as the counter for loop UP 
MOV CX,BX     ;Initialize CX as the counter for loop UP1

UP1: MOV BX,CX 
LEA SI,NUM    ;SI points to the first number in NUM

UP: MOV AX,[SI] 
MOV DX,[SI+2] 
CMP AX,DX 
JB DOWN         ;no swapping if [SI] less than [SI+2] 
MOV [SI],DX 
MOV [SI+2],AX   ;swap the numbers pointed by SI and SI+2 
                ;if [SI] is greater than [SI+2]

DOWN:
INC SI 
INC SI       ;increment SI to point to next dataword(number) 
DEC BX 
JNZ UP 

DEC CX 
JNZ UP1 

MOV AH,4CH 
INT 21H 
END START 
END

【问题讨论】:

    标签: arrays sorting assembly long-integer tasm


    【解决方案1】:

    您读入字符串,然后逐个字符地转换它。 算法可以这样描述

    for each digit in String
       value *= 10
       value += value(digit)
    

    我会给你一个样本:

    string "4132"
    
    "4" is a digit, so value = 10*value (=   0) + digit (=   4)
    "1" is a digit, so value = 10*value (=  40) + digit (=  41)
    "3" is a digit, so value = 10*value (= 410) + digit (= 413)
    "2" is a digit, so value = 10*value (=4130) + digit (=4132)
    no more digits, we're done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多