所以我要在程序集8086中创建一个程序,该程序允许用户输入一个字符数组,直到输入'$',然后从该数组中过滤出该字符并仅保留数字并从中创建一个新数组数字,但将其分组为3位数字。例如:
用户输入:34km12ap111cs345o $ 结果数组:341,211,134
最后,在这种情况下,我想将变量“ zbir”的值存储到结果数组中的第一个和最后一个数字的和:341 + 134 = 475
代码如下:
.model small
.stack 100
.data
niza db 50 dup (?)
broj dw 0
index db ?
nizaA dw 50 dup(?)
zbir dw ?
prv dw ?
vtor dw ?
.code
mov ax, data
mov es, ax
mov ds, ax
mov bx, 0
Vnes:
mov ah, 1
int 21h
mov niza[bx], al
inc bx
cmp al, 36
jne Vnes
mov bx, 0
mov index, 0
Premestuvanje:
mov cl, niza[bx]
cmp cl, 36
je Exit
cmp cl, 48
jl Skok
cmp cl, 57
jg Skok
sub cl, 48
mov ch, 0
mov ax, broj
mov dx, bx
mov bx, 10
mul bl
add ax, cx
mov broj, ax
mov bx, dx
cmp ax, 100
jl Skok
mov dx, bx
mov bl, index
mov bh, 0
mov ax, broj
mov nizaA[bx], ax
mov broj, 0
mov bx, dx
inc index
Skok:
inc bx
jmp Premestuvanje
Exit:
dec index
mov bx, 0
mov ax, nizaA[bx]
mov prv, ax
mov bl, index
mov bh, 0
mov cx, nizaA[bx]
mov vtor, cx
add ax, cx
mov zbir, ax
mov ax, 4c00h
int 21h
ends
但这是问题所在。为了进行测试,我将数组中的第一个数字放在变量“ prv”中,最后一个数字放在变量“ vtor”中。变量“ vtor”似乎拥有适当的值,但变量“ prv”却没有。相反,它与nizaA变量的值相同,因此计算出错误的结果。
有人可以帮忙吗?
答案 0 :(得分:2)
#define _CRT_SECURE_NO_WARNINGS #include "conioex.h" #include "DblBuffer.h" enum // { NEW_GAME = 20, LOAD, EXIT, MAX_NUM }; void main (void) { DblBuffer db; int Cursor_X, Cursor_Y; // cursorlocation bool Key_flag = false; // pressandtrue int type = NEW_GAME; // type Cursor_X = 20; Cursor_Y = 1; int flag = 1; while (flag) { for (int i = 1; i <= 3; i++) { db.setCursorPos(20,i); db.write(" "); } db.setCursorPos(25,1); db.write("New Game\n"); db.setCursorPos(25,2); db.write("Load\n"); db.setCursorPos(25,3); db.write("Exit\n"); if (inport(PK_DOWN)) { if (Key_flag == false) { Cursor_Y = Cursor_Y + 1; type = type + 1; Key_flag = true; } } else if (inport(PK_UP)) { if (Key_flag == false) { Cursor_Y = Cursor_Y - 1; type = type - 1; Key_flag = true; } } else if (inport(PK_ENTER)) { flag = 0; break; } else { Key_flag = false; } if (Cursor_Y < 1) { Cursor_Y = 1; } if (Cursor_Y > 3) { Cursor_Y = 3; } if (type < NEW_GAME) { type = NEW_GAME; } if (type >= MAX_NUM) { type = MAX_NUM - 1; } db.setCursorPos(Cursor_X, Cursor_Y); db.write("→"); db.swap(); } if(type == NEW_GAME) { printf("making a new game"); } if (type == LOAD) { printf("will load"); } if (type == EXIT) { printf("goodbye"); } rewind(stdin); getchar(); }
此数组包含WORDS,但是您可以更改索引来寻址元素,就像它包含BYTES一样。
只需将nizaA dw 50 dup(?)
更改为inc index
,将add index, 2
更改为dec index
。