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