我在ecx
中为rep movsw
设置了600,当它为excutes时,它会移动616个字节。
这个特殊代码表示。
我错过了什么?
在代码之后,我包括两个Pdump来显示移动的结果。 第一个是原点,第二个是目的地。
; This program reads the contents of "E:\RaamSoft\SICBdata\SICBCONS201401.SLD" and
; outputs it to a File.
.486
include \masm32\include\masm32rt.inc
include \masm32\include\debug.inc
includelib \masm32\lib\debug.lib
; ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
.Const
RegFecSz equ 638
NxtRgFx equ 82
MEMORYSIZE equ 65536
; This is how much memory we'll allocate for Work Area.
.Data?
RetCode DWord ?
hFout HANDLE ?
hFfin HANDLE ?
hMemory HANDLE ?
pMemory DWord ?
ReadSize DWord ?
; l for Lengths; h for Handle & p for Pointer of Work Areas
lFFin DWord ?
pFfin DWord ?
lRfin DWord ?
lRfin2 DWORD ?
pFfin2 DWord ?
lWout DWORD ?
pFout DWord ?
lFilefin DWORD ?
bWrt DWORD ?
hRegFin HANDLE ?
pRegFin DWord ?
NxtRegSz DWord ?
pWrkDCT DWord ?
pDeCmp DWord ?
pInAcs DWord ?
pOutQW DWord ?
pOutBCD DWord ?
pOutDsp DWord ?
pWrkCte DWord ?
RetCod DWORD ?
; Wrk DecDsply Sign +/- 18dig sep ; total 20 * 45 * 3 + 20 * 30 * 3 = 2700 + 1800 = 45
; Wrk BCD xDia 1350 xMes 900 = 2250 + 10
; Wrk QWORD xDia 1080 xMes 720 = 1800 + 8
; Tab Fec ddmmaa * (30 + 45) + SldCnt = 450 + 1
; Total = 10039 + 1 -> QW @ 0; TBYTE @ 1808; UNPK @ 4068; TabFec @ 8588
.Data
Outfle DB "E:\RaamSoft\SICBdata\testit.dat", 0
TabFec Byte 800 Dup (0)
; Outfle DB "C:\RaamSoft\SICBmfdata\testit.dat", 0
OutfleSz DWord 10040
FileName DB "E:\RaamSoft\SICBdata\SICBCONS201401.SLD", 0
; FileName DB "C:\RaamSoft\SICBmf\data\SICBCONS201310.SLD", 0
TabFmes Word 3331H, 3331H, 3238H, 3331H, 3330H, 3331H, 3330H, 3331H, 3331H, 3330H
; Oct, Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep
HelloWorld DB "Hello This is the test of SICB-io!", 0
Yalei DB "Hello Ya Lei!", 0
YaArmeFec DB "Hello, ya arme las fechas!", 0
YaGrabeLog DB "Hello, Ya grabe LOG!", 0
HelpMem DB "Ya obtuve MEMORIA",0
Signal1 WORD 0
.Code
start:
;*******
push esi
Push Edi
Push Eax
push ebx
push ecx
push edx ; save 6 wrk-regs
invoke MessageBox, NULL, addr HelloWorld, addr HelloWorld, MB_OK
; Get Wrkarea.
Invoke GlobalAlloc, GMEM_MOVEABLE or GMEM_ZEROINIT, MEMORYSIZE
mov hMemory, eax ; Set Handle of WrkArea
Invoke GlobalLock, hMemory
mov pMemory, eax ; Set Addr of WrkArea (See details above)
add eax, 10040
mov pFfin, eax ; Input Area1 max Lnght 2560
add eax, 2560
mov pFfin2, eax ; Input Area2 Max Lng 2560
add eax, 2560
mov pWrkDCT, eax ; DeCmpWrk Area (256)
; invoke MessageBox, NULL, addr HelpMem, addr HelpMem, MB_OK
; Get File
mov hFfin, fopen(addr FileName)
mov lFilefin, fsize(hFfin)
mov lRfin, fread(hFfin,pFfin,722)
DumpMem pFfin, 722, "RegFecIn"
; invoke MessageBox, NULL, pFfin, addr Yalei, MB_OK
; SetUp Dates
以下是REP MOVSW
的实际设置:
Mov Esi, pFfin
Add Esi, 26 ; Start Fecs
; mov edi, pMemory
; add edi, 8588 ; start fecs
lea edi, TabFec
Mov Ecx, 600 ; 45 + 30 mas fecha y hora generado
cld
Rep Movsw
这里结束了:
Mov Ebx, pFfin
Mov Al, [Ebx + 24] ; Sld Cnt
Mov TabFec + 612, Al
DumpMem Addr TabFec, 616, "Fec2 Cte"
Jmp Final
; *************
Final:
;*******
; GlobalFree (hMemory)
pop edx ;push esi
pop ecx ;Push Edi
pop ebx ;Push Eax
pop eax ;push ebx
pop edi ;push ecx
pop esi ;push edx ; save 6 wrk-regs
Ret
End start
DeBug Dump:
RegFecIn (TestIOsicb2.asm, 99)
0029EFE8 : 31 39 31 30 - 30 30 30 30 - 30 30 30 30 - 30 30 30 30
0029EFF8 : 30 30 30 30 - 30 30 02 66 - 2C 38 64 30 - 30 31 31 32
0029F008 : 31 33 65 30 - 30 32 31 32 - 31 33 66 30 - 30 33 31 32
0029F018 : 31 33 67 30 - 30 34 31 32 - 31 33 68 30 - 30 35 31 32
0029F028 : 31 33 69 30 - 30 36 31 32 - 31 33 6C 30 - 30 39 31 32
0029F038 : 31 33 6D 30 - 31 30 31 32 - 31 33 6E 30 - 31 31 31 32
0029F048 : 31 33 6F 30 - 31 32 31 32 - 31 33 70 30 - 31 33 31 32
0029F058 : 31 33 73 30 - 31 36 31 32 - 31 33 74 30 - 31 37 31 32
0029F068 : 31 33 75 30 - 31 38 31 32 - 31 33 76 30 - 31 39 31 32
0029F078 : 31 33 77 30 - 32 30 31 32 - 31 33 7A 30 - 32 33 31 32
0029F088 : 31 33 7D 30 - 32 36 31 32 - 31 33 7E 30 - 32 37 31 32
0029F098 : 31 33 81 30 - 33 30 31 32 - 31 33 82 30 - 33 31 31 32
0029F0A8 : 31 33 83 30 - 30 31 30 31 - 31 34 84 30 - 30 32 30 31
0029F0B8 : 31 34 85 30 - 30 33 30 31 - 31 34 88 30 - 30 36 30 31
0029F0C8 : 31 34 89 30 - 30 37 30 31 - 31 34 8A 30 - 30 38 30 31
0029F0D8 : 31 34 8B 30 - 30 39 30 31 - 31 34 8C 30 - 31 30 30 31
0029F0E8 : 31 34 8F 30 - 31 33 30 31 - 31 34 90 30 - 31 34 30 31
0029F0F8 : 31 34 91 30 - 31 35 30 31 - 31 34 92 30 - 31 36 30 31
0029F108 : 31 34 93 30 - 31 37 30 31 - 31 34 96 30 - 32 30 30 31
0029F118 : 31 34 97 30 - 32 31 30 31 - 31 34 98 30 - 32 32 30 31
0029F128 : 31 34 99 30 - 32 33 30 31 - 31 34 9A 30 - 32 34 30 31
0029F138 : 31 34 9D 30 - 32 37 30 31 - 31 34 9E 30 - 32 38 30 31
0029F148 : 31 34 9F 30 - 32 39 30 31 - 31 34 A0 30 - 33 30 30 31
0029F158 : 31 34 A1 30 - 33 31 30 31 - 31 34 37 25 - 33 31 30 31
0029F168 : 30 36 0F 2D - 30 31 30 38 - 31 31 2E 2D - 30 31 30 39
0029F178 : 31 31 4C 2D - 30 31 31 30 - 31 31 6B 2D - 30 31 31 31
0029F188 : 31 31 89 2D - 30 31 31 32 - 31 31 A8 2D - 30 31 30 31
0029F198 : 31 32 C7 2D - 30 31 30 32 - 31 32 E4 2D - 30 31 30 33
0029F1A8 : 31 32 03 2E - 30 31 30 34 - 31 32 21 2E - 30 31 30 35
0029F1B8 : 31 32 40 2E - 30 31 30 36 - 31 32 5E 2E - 30 31 30 37
0029F1C8 : 31 32 7D 2E - 30 31 30 38 - 31 32 9C 2E - 30 31 30 39
0029F1D8 : 31 32 BA 2E - 30 31 31 30 - 31 32 D9 2E - 30 31 31 31
0029F1E8 : 31 32 F7 2E - 30 31 31 32 - 31 32 16 2F - 30 31 30 31
0029F1F8 : 31 33 35 2F - 30 31 30 32 - 31 33 51 2F - 30 31 30 33
0029F208 : 31 33 70 2F - 30 31 30 34 - 31 33 8E 2F - 30 31 30 35
0029F218 : 31 33 AD 2F - 30 31 30 36 - 31 33 CB 2F - 30 31 30 37
0029F228 : 31 33 EA 2F - 30 31 30 38 - 31 33 09 30 - 30 31 30 39
0029F238 : 31 33 27 30 - 30 31 31 30 - 31 33 46 30 - 30 31 31 31
0029F248 : 31 33 64 30 - 30 31 31 32 - 31 33 83 30 - 30 31 30 31
0029F258 : 31 34 30 31 - 30 32 31 34 - 30 37 31 32 - 35 35 31 39
0029F268 : 31 31 39 31 - 30 31 30 30 - 33 30 30 30 - 30 34 30 30
0029F278 : 30 30 30 31 - 06 B4 EF FE - FF EF BE FF - EF FE FF EF
0029F288 : FE FB FF FE - FF FF BF FF - EF BE FF FF - FC 3F FF FF
0029F298 : FF FF FF FF - FF FF FC 03 - FF FF FF FF - FF FF FF FF
0029F2A8 : FF FF FF FF - FF FF FF FD - 7F FF FF FF - FF FC 3C C8
0029F2B8 : 39 23 00 00 - 00 00 00 00 - 00 00 00 00 - 00 00 00 00
00000722 : BYTES TOTAL
00404020 : 64 30 30 31 - 31 32 31 33 - 65 30 30 32 - 31 32 31 33
00404030 : 66 30 30 33 - 31 32 31 33 - 67 30 30 34 - 31 32 31 33
00404040 : 68 30 30 35 - 31 32 31 33 - 69 30 30 36 - 31 32 31 33
00404050 : 6C 30 30 39 - 31 32 31 33 - 6D 30 31 30 - 31 32 31 33
00404060 : 6E 30 31 31 - 31 32 31 33 - 6F 30 31 32 - 31 32 31 33
00404070 : 70 30 31 33 - 31 32 31 33 - 73 30 31 36 - 31 32 31 33
00404080 : 74 30 31 37 - 31 32 31 33 - 75 30 31 38 - 31 32 31 33
00404090 : 76 30 31 39 - 31 32 31 33 - 77 30 32 30 - 31 32 31 33
004040A0 : 7A 30 32 33 - 31 32 31 33 - 7D 30 32 36 - 31 32 31 33
004040B0 : 7E 30 32 37 - 31 32 31 33 - 81 30 33 30 - 31 32 31 33
004040C0 : 82 30 33 31 - 31 32 31 33 - 83 30 30 31 - 30 31 31 34
004040D0 : 84 30 30 32 - 30 31 31 34 - 85 30 30 33 - 30 31 31 34
004040E0 : 88 30 30 36 - 30 31 31 34 - 89 30 30 37 - 30 31 31 34
004040F0 : 8A 30 30 38 - 30 31 31 34 - 8B 30 30 39 - 30 31 31 34
00404100 : 8C 30 31 30 - 30 31 31 34 - 8F 30 31 33 - 30 31 31 34
00404110 : 90 30 31 34 - 30 31 31 34 - 91 30 31 35 - 30 31 31 34
00404120 : 92 30 31 36 - 30 31 31 34 - 93 30 31 37 - 30 31 31 34
00404130 : 96 30 32 30 - 30 31 31 34 - 97 30 32 31 - 30 31 31 34
00404140 : 98 30 32 32 - 30 31 31 34 - 99 30 32 33 - 30 31 31 34
00404150 : 9A 30 32 34 - 30 31 31 34 - 9D 30 32 37 - 30 31 31 34
00404160 : 9E 30 32 38 - 30 31 31 34 - 9F 30 32 39 - 30 31 31 34
00404170 : A0 30 33 30 - 30 31 31 34 - A1 30 33 31 - 30 31 31 34
00404180 : 37 25 33 31 - 30 31 30 36 - 0F 2D 30 31 - 30 38 31 31
00404190 : 2E 2D 30 31 - 30 39 31 31 - 4C 2D 30 31 - 31 30 31 31
004041A0 : 6B 2D 30 31 - 31 31 31 31 - 89 2D 30 31 - 31 32 31 31
004041B0 : A8 2D 30 31 - 30 31 31 32 - C7 2D 30 31 - 30 32 31 32
004041C0 : E4 2D 30 31 - 30 33 31 32 - 03 2E 30 31 - 30 34 31 32
004041D0 : 21 2E 30 31 - 30 35 31 32 - 40 2E 30 31 - 30 36 31 32
004041E0 : 5E 2E 30 31 - 30 37 31 32 - 7D 2E 30 31 - 30 38 31 32
004041F0 : 9C 2E 30 31 - 30 39 31 32 - BA 2E 30 31 - 31 30 31 32
00404200 : D9 2E 30 31 - 31 31 31 32 - F7 2E 30 31 - 31 32 31 32
00404210 : 16 2F 30 31 - 30 31 31 33 - 35 2F 30 31 - 30 32 31 33
00404220 : 51 2F 30 31 - 30 33 31 33 - 70 2F 30 31 - 30 34 31 33
00404230 : 8E 2F 30 31 - 30 35 31 33 - AD 2F 30 31 - 30 36 31 33
00404240 : CB 2F 30 31 - 30 37 31 33 - EA 2F 30 31 - 30 38 31 33
00404250 : 09 30 30 31 - 30 39 31 33 - 27 30 30 31 - 31 30 31 33
00404260 : 46 30 30 31 - 31 31 31 33 - 64 30 30 31 - 31 32 31 33
00404270 : 83 30 30 31 - 30 31 31 34 - 30 31 30 32 - 31 34 30 37
00404280 : 31 32 35 35 - 2C 39 31 31 - 00 00 00 00 - 00 00 00 00
00000616 : BYTES TOTAL
答案 0 :(得分:5)
我在ecx中为rep movsw设置600,当它执行时它会移动616个字节。这个特殊代码表示。
我希望它移动1200字节(600 * sizeof(word)
)。您在ecx
中输入的值是重复次数,而不是字节数。