汇编输入行与列实现对二维数组的查询

初学汇编,简单实现了一下键盘输入行和列,然后屏幕显示对应元素的功能。
一.思路
了解到汇编中其实没有二维数组的概念,需要用一维数组进行模拟,接着就是傻傻地写了,毫无技术含量。
二.注意点
DOS功能调用不管是键盘输入,还是屏幕输出都是以字符形式,要变成10进制要减去对应的ASCLL码,比如0的ASCLL码就是48,代码有体现到。
三.代码

dseg segment
    str db '1','2','3','4','5','5','4','3','2','1'
    str1 db 'please input the row:',0dh,0ah,'$'
    str2 db 'please input the column:',0dh,0ah,'$'
    str3 db 'too big!',0dh,0ah,'$'
    row db 2
    col db 5
    row1 db 0
    col1 db 0
dseg ends
cseg segment
    assume  cs:cseg,ds:dseg
start:
    mov ax,dseg
    mov ds,ax
    lea bx,str
    xor ax,ax
    ;
    lea dx,str1
    mov ah,09h
    int 21h
    mov ah,01h
    int 21h
    sub al,48
    mov row1,al
    mov ah,02h
    mov dl,0dh
    int 21h      ;out huiche
    mov ah,02h
    mov dl,0ah
    int 21h      ;out huanhang
    ;
    lea dx,str2
    mov ah,09h
    int 21h
    mov ah,01h
    int 21h
    sub al,48
    mov col1,al
    mov ah,02h
    mov dl,0dh
    int 21h      ;out huiche
    mov ah,02h
    mov dl,0ah
    int 21h      ;out huanhang
    ;
    mov al,row
    cmp al,row1
    jl gg
    mov al,col
    cmp al,col1
    jl gg
    mov ax,0
    sub row1,1
    sub col1,1
    mov al,row1                 ;row1*col+col1
    mov cl,col
    mul cl
    add al,col1
    jmp ll
gg:
    lea dx,str3
    mov ah,09h
    int 21h
    mov ah,4ch
    int 21h
ll:
    lea bx,str
    add bx,ax
    mov dl,[bx]
    mov ah,02h
    int 21h
    mov ah,4ch
    int 21h
cseg ends
    end start

四.运行结果

原文地址:https://www.cnblogs.com/Advancingxq/p/9813344.html

时间: 2024-10-29 07:38:04

汇编输入行与列实现对二维数组的查询的相关文章

假设客车的座位数是9行4列,使用二维数组在控制台应用程序中实现简单的客车售票系统。

具体要求为: 使用一个二维数组记录客车售票系统中的所有座位号,并在每个座位号上都显示有票,然后用户输入一个坐标位置,按Enter键,即可将该座位号显示为已售. 首先我定义的输入格式为:1,2 个人认为主要知识点伪代码如下 1.字符串分割 char[] separator = { ',' }; splitstrings = str.Split(separator); 2.字符串前后去空 str.Trim() 3.转换类型,如果不是int类型则为false,可以处理异常情况. int columnN

二维数组遍历查询数据

$area_list==> Array ( [0] => Array ( [ap] => 19 [ac] => 512962 [ax] => 513621 ) [1] => Array ( [ap] => 1 [ac] => 32 [ax] => 256 ) [2] => Array ( [ap] => 16 [ac] => 409220 [ax] => 412722 ) ) foreach($area_list as $k2=

二维数组按某列排序

1 using FrameWork.IoC.Achieve.IoCAbstractBasics; 2 using FrameWork.IoC.Achieve.IoCBasics; 3 using FrameWork.IoC.Case.Test; 4 using FrameWork.IoC.Case.Test.TestOne; 5 using FrameWork.IoC.Case.Test.TestTwo; 6 using System; 7 using System.Collections; 8

C# 实现二维数组的排序算法(代码)

class Order { /// <summary> /// 对二维数组排序 /// </summary> /// <param name="values">排序的二维数组</param> /// <param name="orderColumnsIndexs">排序根据的列的索引号数组</param> /// <param name="type">排序的类型,

汇编学习:二维数组遍历

作为正式接触汇编的开篇,本文将研究二维数组的遍历问题.在图像处理中,通常需要遍历图像像素(即二维数组).下面给出三个版本的遍历函数,并研究他们的汇编代码(VC2010编译器,x86版,Release模式). (1)在两层循环内每次根据行列索引计算元素位置. (2)为了避免在内存循环内的乘法计算,可在每次外层循环中计算好行起始地址,内层循环每次执行++操作. (3)将外层循环的乘法操作也去掉,在循环外部先计算好数组的起始地址,内层循环每次执行++操作即可. 测试程序实现对图像的反相操作(即B=25

剑指offer 面试题(二维数组中的查找) (2)

面试题: 二维数组中的查找 /* 题目:   在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成 一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该数. */ ps:(其实前段时间我就做过这道题,今天看到了,觉得还是有点生,那就再来一次吧) 题目分析:  在分析这个问题的时候,我们首先要看,在一个二维数组中查找一个数字是否存在,那么很多人就觉得 简单了,遍历二维数组与所需要查找的数字进行比较不就完了!  不可否认的是你说的是可行的,可是

二维数组求最大子数组和(环形)

一.实验题目 返回一个二维数组中最大子数组的和. 实验要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.实验思路 这次我们设计的实验是手动输入二维数组的行数和列数,二维数组的环形求和我们设计的思路和一位数组的类似,就是把求完的数组的第一列放到最后,依次类推.求最大的子数组和时和二维数组的求和类似,即:输入的二维数组是 -1 

二维数组元素的地址

一维数组元素的地址大家都比较容易理解,但对于二维数组,就很容易搞混了.今天我又被这个问题给弄糊涂了,翻了翻老谭的书本,对这个问题有了更深的认识. 首先给出一个二维数组a,它的定义为: int a[3][4] = {{1,3,5,7}, {9,11,13,15}, {17,19,21,23}}; a数组包含3个行元素,a[0],a[1],a[2].而每个行元素又是一个一维数组,它包含4个元素. 从二维数组的角度来看,a代表二维数组首元素的地址,现在的首元素不是简单的整型,而是由4个整型元素所组成的

二维数组作为函数参数传递剖析

前言 很多文章不外乎告诉你下面这几种标准的形式,你如果按照它们来用,准没错: //对于一个2行13列int元素的二维数组 //函数f的形参形式 f(int daytab[2][13]) {...} //以下两种可以忽略行数 f(int daytab[][13]) {...} f(int (*daytab)[13]) {...} 甚至会有人告诉你多维数组作为参数传递可以省略第一维,其他维不能省略.然而你对这种形式并不满意:如果事先限定了二维数组的大小,函数的泛用性就要大打折扣了.因为你真正需要的,