Windows 汇编程序(TASM x64)数组和元素

Windows 汇编程序(TASM x64)数组和元素,windows,assembly,x86,dos,tasm,Windows,Assembly,X86,Dos,Tasm,我有一个九个名字的数组: .model tiny .data vardas1 db "Rokas",0ah,'$' vardas2 db "Tomas",0ah,'$' vardas3 db "Matas",0ah,'$' vardas4 db "Domas",0ah,'$' vardas5 db "Augis",0ah,'$' vardas6 db "Vofka",0ah,'$' vardas7 db "Marka",0ah,'$' vardas8 db "Auris",0ah,'$'

我有一个九个名字的数组:

.model  tiny

.data 

vardas1 db "Rokas",0ah,'$'
vardas2 db "Tomas",0ah,'$'
vardas3 db "Matas",0ah,'$'
vardas4 db "Domas",0ah,'$'
vardas5 db "Augis",0ah,'$'
vardas6 db "Vofka",0ah,'$'
vardas7 db "Marka",0ah,'$'
vardas8 db "Auris",0ah,'$'
vardas9 db "Edvis",0ah,'$'


vardai dw offset vardas1, offset vardas2, offset vardas3, offset vardas4, offset vardas5, offset vardas6, offset vardas7, offset vardas8, offset vardas9

.code

org 100h  
我需要从键盘上读一个数字,然后我需要打印那个名字。例如,我将按5键,控制台应写“Augis”。顺便说一句,第二个代码块并不都是代码,只是循环不起作用

paieska:

    mov dx, offset _comment1        ; Just string name asking user to input digit 
    mov ah, 9                       
    int 21h                         

    mov j, 00h                      ; Trying to input the digit from keyboard 
    mov ah, 01h
    mov dl, 0ah
    int 21h

    mov bx, offset vardai           ; Add array "names" to bx register
    add bx, cx                      ; Add cx for indexing
    mov dx, [bx]                    ; Add first array element to dx register

    add cx, 2                       ; Increasing cx by 2, because I'm using data word not data byte
    mov ah, 9                       ; Try to print it
    int 21h


    cmp cx, j                       ; Try to compare cx (index of array) to mine inputed digit "j"
    jne paieska
    je end
嗯,我试着用大写字母编辑你的方法,但它变得太复杂了

基本上,您正在使用函数
01
从键盘读取字符。这个字符到达AL。如果一切顺利,它应该是'1'、'9'。请注意,这些是ASCII字符'1'..'9',即十六进制31..39

下一步是将
BX
设置为表格的开头,
AH
设置为您预期的最小字符,
CX
设置为2,因为表格包含字,而不是字节

现在我们有一个循环。从表中加载
X
,并检查
AL
是否等于
AH
。如果用户输入
1
,则这些值将相等,因此请打印字符串

否则,将2添加到
BX
以指向表中的下一个条目(这可以通过
add BX,2
INC BX INC BX
完成,这意味着
MOV CX,2
将是不必要的-就像我写的那样…),并将
AH
中的
'1'
增加到
'2'

循环的结束条件是
AH
'9'
递增到-well、
':'
'9'+1
。如果未达到该结束条件,则围绕循环运行,直到所有值
'1'
'9'
都已测试完毕。如果您还没有进入PNAME,那么会出现错误,因为不允许输入字符,所以请指向错误消息,然后打印它

现在跳到结尾-可能您想终止程序,因此您需要执行

  MOV AH,4CH
  INT 21H

欢迎来到StackOverflow!我发现这个问题有点不清楚,哪个是问题,哪个是你的问题?请出示与我们相关的代码。问题是什么?您应该澄清什么不起作用(错误消息、应用程序崩溃等)以及您需要帮助的地方,因为目前还不清楚。
  MOV AH,4CH
  INT 21H