【问题标题】:Specific assembly commands functions具体汇编命令函数
【发布时间】:2019-11-10 16:44:38
【问题描述】:

我是学习汇编语言的新手,我想知道这个命令是什么意思,它们没有任何特定的顺序

mov al,[si]
mov [di],al 
inc si
inc di
dec cx
jnz b20
jnz b21
movah 09h`

提前感谢您的回答。 提供给我的代码:

Page 60,132
. Model small
. Stack 64
.data nom db 'FAUSTINO','$'
ape db 'VAZQUEZ','$'
nomcom db 'ABCDEFGHIJKLMNO','$'
.code
begin proc far
mov ax,@data
mov ds,ax
mov es,ax
mov cx,08
lea si,nom
lea di,
nomcom
b20:
mov al,[si]
mov [di],al
inc si
inc di
dec cx
jnz b20
mov cx,07
lea si,ape
b21:
mov al,[si]
mov [di],al
Inc si
Inc di
Dec cx
Jnz b21
mov ah, 09h ;
Lea dx, nomcom ;
mov ax, 4c00h
int 21h
begin endp
end begin

【问题讨论】:

  • 它们按特定顺序排列。复制然后递增指针。和 dec/jnz 所以 JNZ 读取由dec 设置的标志。您可以按其他顺序递增指针,或者在加载后、存储之前递增源指针,但循环体的大多数其他顺序会破坏它。
  • 如果您想知道每个人分别做了什么,请在指令集参考中查找它们。 felixcloutier.com/x86/index.html

标签: assembly dos x86-16


【解决方案1】:

小细节

mov al,[si] 使用存储在SI 寄存器中的地址从内存中读取一个字节。

mov [di],al 使用DI 寄存器中存储的地址将一个字节写入内存。

inc si 将源地址提高 1。

inc di 将目标地址提高 1。

dec cx 将循环计数器降低 1。

jnz b20 将继续循环,只要循环计数器未降至零。

大局

.data
nom db 'FAUSTINO','$'
ape db 'VAZQUEZ','$'
nomcom db 'ABCDEFGHIJKLMNO','$'

鉴于上述数据定义和寄存器SIDICX的设置,程序首先复制 8个字符的文本“FAUSTINO”覆盖文本“ ABCDEFGH”,然后在文本“IJKLMNO”上复制 7 个字符的文本“VAZQUEZ”。因为一切都非常合适,所以 nomcom 的目标缓冲区现在包含“FAUSTINOVAZQUEZ$”。这具有提交给 DOS.PrintString 函数 09h 的正确格式。遗憾的是,您的程序错过了必要的 int 21h 指令,因此程序在输出合并结果之前终止。

    mov cx, 8       ; Length of the text "FAUSTINO"
    lea si, nom     ; Address of the text "FAUSTINO"
    lea di, nomcom  ; Address of destination buffer
b20:
    mov al, [si]
    mov [di], al
    inc si
    inc di
    dec cx
    jnz b20

    mov cx, 7       ; Length of the text "VAZQUEZ"
    lea si, ape     ; Address of the text "VAZQUEZ"
b21:
    mov al, [si]
    mov [di], al
    inc si
    inc di
    dec cx
    jnz b21

    mov ah, 09h     ; DOS.PrintString
    lea dx, nomcom
    int 21h
    mov ax, 4C00h   ; DOS.Terminate
    int 21h

nomcom 处的缓冲区中的初始内容并不重要,除了第 16 个字节包含 DOS 字符串终止符“$”。
nomcom 的数据定义可以写成:

nomcom db 15 dup (0), '$'

程序会执行相同的操作。但是使用dup 运算符是定义缓冲区的更常用形式!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2011-03-03
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多