好吧,为了使事情变得尽可能简单,我说我有一个基本循环,我想用它来修改标记为a的数组的某些元素.在下面的示例代码中,我尝试将a的所有元素替换为1,但这并不能真正起作用.
assume cs:code ,ds:data
data segment
a db 1,2,3,4
i db 0
data ends
code segment
start:
mov ax,data
mov ds,ax
lea si,a
the_loop:
mov cl,i
cmp cl,4
jae the_end
mov ds:si[i],1 ; this is the part that i don't really understand since
inc i ; i'm expecting i=0 and ds:si[i] equiv to ds:si[0] which
loop the_loop ; is apparently not the case here since i actually receives the
; the value 1
the_end:
mov ax,4c00h
int 21h
code ends …Run Code Online (Sandbox Code Playgroud) 程序应该打开文件,从中读取并打印前 4 个字符。
我不知道问题出在哪里。我什至在那里自己创建了文件,但它仍然无法打开文件。
org 100h
jmp start
filename db "C:\f1.txt",0
errormessage: db "Ndodhi nje gabim gjate ekzekutimit$"
Buffer db 50h dup(?)
start:
lea dx,filename
mov ah,3Dh
mov al,0
int 21h
jc error
mov bx,ax
mov ah,3Fh
mov cx,4
lea dx,Buffer
int 21h
jmp end
error:mov dx,offset errormessage
mov ah,09h
int 21h
end: ret
Run Code Online (Sandbox Code Playgroud)我想将CS(代码段)和IP(指令指针)地址存储到任何可用的寄存器AX,BX,CX或DX中.是否有可能以某种方式访问当前的CS或IP值?
使用DOS int 21hAPI,如何在文件中间写文本而不是重写?即执行"插入"操作,而不是覆盖.
在我可以找到的关于 MOV 助记符的操作码的所有文档中,每个操作码都没有单独记录。操作码B8h+记录为将 16 位或 32 位数据移动到 16 位或 32 位注册表。究竟关注什么注册表,取决于B8h操作码高出多远。也就是说,要获得B8h类型为 MOV 指令的操作码,您需要B8h将寄存器的编号相加。问题是,我没有找到有关每个注册表数量的任何信息。以下是我的猜测,但我不确定。
目的地登记处。操作码。
AX B8
CX B9
DX BA
BX BB
EAX BC
ECX BD
EDX BE
EBX BF
Run Code Online (Sandbox Code Playgroud) 我的任务是将 AX 和 BX 与 AX 相加,而不使用“MOV”或“LEA”操作数。我有点卡在这里,你能帮我吗?
; AX need to be 15, using ONLY 'mov' and 'lea'.
; Do NOT use arithmetic instrutions (add, inc, mul, etc.)
mov ax,10
mov bx,4
lea cx,ax
lea cx, [cx+bx]
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?抱歉我的错误,我是新手。
我一直试图修复我的代码一段时间,但我似乎无法让它工作。它总是告诉我错误:无法生成 COM 文件,存在堆栈段。有什么想法可以解决这个问题吗?
这是我的代码:
.model small
.386
.stack 100h
.data
inpM db "Input string: $"
input db 19 ; max allowed 20
db ? ; # char entered
db 19 dup(0) ; chars entered
output db 19 dup("$")
.code
start: mov ax, @data
mov ds, ax
mov ah, 9 ; print inpM
lea dx, inpM
int 21h
mov ah, 0Ah ; get input
lea si, input
mov dx, si
int 21h
mov cl, [si+1] ; reverse
mov ch, 0
add …Run Code Online (Sandbox Code Playgroud) 以下代码打印字符“a”:
mov dl, ‘a'
mov ah, 2
int 21h
Run Code Online (Sandbox Code Playgroud)
我已经阅读了本手册,发现al我们得到:
返回:AL = 最后一个字符输出
我试图理解的是为什么我们实际上需要这种返回值?当我们在屏幕上获得输出时,这对我来说毫无意义,而且我们在 DL 中已经打印了最后一个字符(因为我们刚刚打印了它)。任何的想法?
我想知道是否有一种无需使用MUL或DIV指令即可执行任何乘法或除法的方法,因为它们需要大量的CPU周期。我可以针对该目标利用SHL或SHR指令吗?如何实现汇编代码?
我需要特定数字的帮助-我如何bx仅用5个命令就能乘以41?
每当我尝试解决问题时,我至少会得到6条命令...
我的代码:
mov ax,bx
mov cx,bx
shl bx,5 ; *32
shl ax,3 ; *8
add bx,ax ; *40
add bx,cx ; *41
Run Code Online (Sandbox Code Playgroud)