使用stosw命令存储字符串 - ASM

时间:2013-06-04 19:44:12

标签: assembly

我的汇编代码,用于在8C0A2开始的地址存储一个字(总共40h字)

结果表示代码是寄存器CX为0000h(如所示),DI为0082h(如所示)。

在gven地址检查细分ES后,我发现它没有设置为AFFEh这个词,我不知道为什么!

.186
.model  small
.stack  100h

.data
count   dw  0040h       ; write 40 times the string
muster  dw  0AFFEh      ; AFFEh to the Extrasegment with the
insert  dw  8C0Ah       ; address 8C0Ah

.code
start:
    mov ax, @data
    mov ds, ax

    mov es, insert

    mov ax, muster

    mov cx, count

    mov di, 2       

    rep stosw       

    mov ah, 4Ch     
    int 21h
    end start

2 个答案:

答案 0 :(得分:0)

我不确定你到底要做什么。 es指向的单词不包含0AFFEh的原因是mov di, 2 - 模式插入从(es+2)开始,然后继续到更高的地址。

答案 1 :(得分:0)

mov es,INSERT可能无效,您可能需要用bp指向以获取十六进制值

mov ax,DATA
mov ds,ax mov bp,INSERT
mov es,[bp]
mov bp,MUSTER
mov ax,[bp]
mov bp,COUNT
mov cx,[bp]
mov di,2
rep stosw

DATA
COUNT
dw 40
MUSTER
dw AFFE
INSERT
dw 8C0A

所有我得到的是一系列分数和曲线... /〜/〜/〜/〜,这是AFFE十六进制内容的斧头

通常losb / losw与stosw一起使用,这会加载al / ax

==========================

如果这确实有效

   mov es, insert

   mov ax, muster

   mov cx, count

然后您所做的就是使用INSERT等的内存地址加载es,而不是其内容

"在gven地址检查细分ES后,我发现它没有设置为AFFE"

ES有8C0A,这是" INSERT"