Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. Tuan

    Tuan New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2011
    Сообщения:
    2
    Нужно сделать вывод результата на экран (в окне отдельном) в ассемблере (сам код написан и работает). У самого идеи кончились. Постоянно ошибки какие-то лезут...
    Помощь нужна срочно.

    Код:

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5.  
    6.  
    7. _DATA SEGMENT
    8. consA equ 1574 ;626h
    9. consB equ 432 ;1B0h
    10. consC equ 1632 ;660dh
    11. consD equ 1835 ;72Bh
    12.  
    13. consx1 equ 586; 24Ah
    14. consx2 equ 649; 289h
    15. consx3 equ 934; 3A6h
    16.  
    17. mul_rez_l dw 0
    18. mul_rez_h  dw 0
    19. mul_rez_c dw 0
    20.  
    21. carry dw 0
    22. _DATA ENDS
    23.  
    24. CSEG SEGMENT
    25. _Begin:
    26.     xor eax,eax
    27.     xor ebx,ebx
    28.     xor edx,edx
    29.    
    30. firstx:
    31.     mov ax,consx1 ;
    32.     add ax,consA
    33.     sub ax,consB
    34.     mov bx,consC
    35.     mul bx ;результат dx:ax
    36.     mov bx,consD
    37.     div bx ; делим результат предыдущих операций  dx:ax на bx  частное ax, остаток dx
    38.  
    39.     xor eax,eax
    40.     xor ebx,ebx
    41.     xor edx,edx
    42.    
    43.  
    44. secondx:
    45.     mov ax,consx2 ;
    46.     add ax,consA
    47.     sub ax,consB
    48.     mov bx,consC
    49.     mul bx ;результат dx:ax
    50.     mov bx,consD
    51.     div bx ; делим результат предыдущих операций  dx:ax на bx  частное ax, остаток dx
    52.  
    53.     xor eax,eax
    54.     xor ebx,ebx
    55.     xor edx,edx
    56.  
    57. thirdx:
    58.     mov ax,consx3 ;
    59.     add ax,consA
    60.     sub ax,consB
    61.     mov bx,consC
    62.     mul bx ;результат dx:ax
    63.     mov bx,consD
    64.     div bx ; делим результат предыдущих операций  dx:ax на bx  частное ax, остаток dx
    65.  
    66.     xor eax,eax
    67.     xor ebx,ebx
    68.     xor edx,edx
    69.  
    70.    
    71. y1:
    72.     ;вычислим 12*x1^2 + 7x1 - 16
    73.     ;x^2
    74.     mov ax,consx1
    75.     mov bx,ax
    76.     mul bx
    77.     jnc no_carry_x1_2
    78.     mov mul_rez_h,dx
    79. no_carry_x1_2:
    80.     mov mul_rez_l,ax
    81.    
    82.     ;12* x^2
    83.     xor dx,dx
    84.     mov bx,12 ; 0Ch
    85.     mul bx
    86.     mov carry, dx
    87.     mov mul_rez_l,ax
    88.  
    89.     xor dx,dx
    90.     mov ax,mul_rez_h
    91.     mul bx
    92.     add ax,carry
    93.     adc dx,0
    94.     mov mul_rez_h,ax
    95.     mov mul_rez_c,dx  
    96.  
    97.     ;7x1
    98.     xor dx,dx
    99.         mov ax,consx1
    100.         mov bx,7
    101.         mul bx ; - результат dx:ax
    102.  
    103.     ;12*x1^2 + 7x1
    104.     add ax,mul_rez_l
    105.         adc dx,mul_rez_h
    106.         adc mul_rez_c,0
    107.    
    108.     ;...-16
    109.         mov bx,16 ; 10h
    110.     sub ax, bx
    111.         jnc no_carry_sub
    112.     neg ax
    113. no_carry_sub:
    114.         sbb dx,0
    115.         jnc no_carry_sub2
    116.         neg dx
    117. no_carry_sub2:
    118.         sbb mul_rez_c,0
    119.     ret
    120.  
    121. CSEG ends
    122.  
    123.  
    124.  
    125. end _Begin
    Благодарю заранее всех отозвавшихся.
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Tuan
    и правильно лезут. Какая-то невероятная смесь из .model flat, stdcall, чисто 16-битного описания сегментов, 16-битного кода (судя по комментариям) и 32-битных регистров временами. Тут даже помогать невозможно - с чего начинать не понятно, и что в результате хотите, тоже неизвестно - вывода результата куда бы то ни было я так и не вижу.
     
  3. Tuan

    Tuan New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2011
    Сообщения:
    2
    http://up.optizone.ru/603306/ тут само задание и комментарии к коду. Может чем поможет.
    Прога то сама работает.
     
  4. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    Помогите присоединить файл
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap :none
    4. ReadFileFromDisk proto  :dword
    5. Base64Conv  proto
    6. ;--------------------------------------------------
    7. include \masm32\include\kernel32.inc
    8. include \masm32\include\windows.inc
    9. include \masm32\include\masm32.inc
    10. include \masm32\include\user32.inc
    11. include \masm32\include\wsock32.inc
    12.  
    13. includelib \masm32\Lib\masm32.lib
    14. includelib \masm32\Lib\user32.lib
    15. includelib \masm32\Lib\kernel32.lib
    16. includelib \masm32\Lib\wsock32.lib
    17. ;--------------------------------------------------
    18.  
    19. CrLf        equ 0dh,0ah
    20. lpRecvBufLen    equ 200h
    21. .data
    22. Base64Date      db 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',0
    23. lszAttach        db "D:\smtpMy\my.txt",0
    24. ;---------------- Mail Header ---------------------
    25. Header      db  'From: <retro83@list.ru>',CrLf                      ;|от кого
    26.         db  'X-Mailer: The Bat! (v2.12.00) Business',CrLf      ;|косим под TheBat!:)
    27.         db  'Reply-To: <retro83@list.ru>',CrLf                  ;|от кого
    28.         db  'X-Priority: 3 (Normal)',CrLf
    29.         db  'To: <retro5555@ukr.net>',CrLf                        ;|кому
    30.         db  'Subject: Test tema',CrLf                          ;|тема письма
    31.         db  'MIME-Version: 1.0',CrLf
    32.     db   'Content-Type: multipart/mixed; boundary="----A4D921C2D10D7DB"',CrLf,CrLf,0
    33.  
    34.  
    35. ;------------------ E-Mail Text --------------------
    36. Message     db  '----A4D921C2D10D7DB',CrLf
    37.                              db 'Content-Type: text/plain; charset=windows-1251',CrLf
    38.                             db  'Content-Transfer-Encoding: 8bit',CrLf
    39.                             db  'soobsenie',CrLf,0
    40. ;---------------------------------------------------------------------------
    41. msg_my  db    'soobsenie',CrLf,0
    42. ;========================================================
    43.  
    44. ;============= Mail Data ==============
    45. Server      db  'smtp.mail.ru',0                     ;|сервер
    46. MailFrom    db  'MAIL FROM: <retro83@list.ru>',CrLf,0 ;|от кого
    47. MailTo      db  'RCPT TO: <retro5555@ukr.net>',CrLf,0   ;|кому
    48. ;---------- Login/Pass (Base64 Encode) -------------
    49. Login       db  'cmV0cm84M0BsaXN0LnJ1',CrLf,0                   ; base64 -- retro83@list.ru    
    50. Pass        db  'cXFxcXFxMQ==',CrLf,0                                  ;base -- qqqqqq1
    51. ;---------------------------------------------------
    52.  
    53. ;---------------------------------------------------
    54. SecondPartTemplate  db '----ct757',0Dh,0Ah    
    55.                 db 'Content-Type: application/octet-stream;name="my.txt"',0Dh,0Ah
    56.                 db 'Content-Disposition: attachment;filename="my.txt"',0Dh,0Ah
    57.                 db 'Content-Transfer-Encoding: base64',0Dh,0Ah
    58.  
    59. ;------------- MailServer's commands ---------------
    60. HELO    db 'EHLO %s',CrLf,0
    61. AUTH    db 'AUTH LOGIN',CrLf,0
    62. DATA    db 'DATA',CrLf,0
    63. ENDD    db CrLf,'.',CrLf,0
    64. QUIT    db 'QUIT',CrLf,0
    65. ;---------------------------------------------------
    66. ;---------------------------------------------------
    67. .data?
    68. wsadata     WSADATA     <>
    69. sin     sockaddr_in <0>
    70. hSock       dd      ?
    71. lpBuf1      db      ?
    72. Helo_Buf    db      ?
    73. buf     db      ?
    74.   ldFileSiz dd ?
    75.   lpFileData dd ?
    76.   lpBase64Out dd ?
    77.    pMessage dd ?
    78.     ldFullSiz dd ?
    79. ;---------------------------------------------------
    80. .code
    81.  
    82. ReadFileFromDisk    proc uses edi esi ebx pFileName:dword
    83.  
    84.     LOCAL hFile:dword
    85.     LOCAL resRead:dword
    86.     LOCAL fileSiz:dword
    87.     LOCAL pBuffer:dword
    88.  
    89.     invoke CreateFile, pFileName, 80000000h, FILE_SHARE_READ, 0, 3, 80h, 0     
    90.         mov    hFile, eax
    91.     .if eax != -1      
    92.        invoke GetFileSize, hFile, 0
    93.        mov    fileSiz, eax
    94.        invoke VirtualAlloc, 0, fileSiz, 1000h, 40h  
    95.        mov    pBuffer, eax
    96.        invoke SetFilePointer, hFile, 0, 0, 0
    97.        .if eax != -1       
    98.               invoke ReadFile, hFile, pBuffer, fileSiz, addr resRead, 0
    99.           .if eax != 0
    100.                 mov  ecx, resRead              
    101.                 .if ecx == fileSiz
    102.                invoke CloseHandle, hFile   
    103.                    mov    eax, pBuffer
    104.                mov    ecx, fileSiz
    105.                    ret
    106.                 .endif  
    107.               .endif
    108.        .endif
    109.     .endif     
    110.         invoke CloseHandle, hFile  
    111.         mov    eax, -1
    112.         ret
    113.  
    114. ReadFileFromDisk    endp
    115. ;===============================================================================
    116. Recv_DataLF proc uses edi
    117.         lea     edi,lpBuf1
    118.         mov     ecx,lpRecvBufLen
    119. @loop:
    120.         jecxz   @err ; Check for buffer overlow
    121.  
    122.         push    ecx
    123.         invoke  recv,hSock,edi,ecx,0
    124.         pop     ecx
    125.  
    126.         ; Error occured
    127.         cmp     eax,SOCKET_ERROR
    128.         je      @err
    129.  
    130.         add     edi,eax ; Move the poiter
    131.         sub     ecx,eax ; Decrease remaining buffer size
    132.  
    133.  
    134.         ; Fix edi-1 problems when connection was closed from the first
    135.         ; call of recv procedure (eg. wasn't received any data)
    136.         cmp     ecx,lpRecvBufLen
    137.         jz      @test
    138.  
    139.         ; Note: recv always receives at least 1 byte if no error occures
    140.         ; or connection hasn't been dropped
    141.         cmp     byte ptr[edi-1],10
    142.         je      @ok
    143.  
    144. @test:
    145.         ; If connection was closed do not try to receive more data
    146.         test    eax,eax        
    147.         jz      @err
    148.  
    149.         jmp     @loop
    150. @err:
    151.         xor     eax,eax
    152.         jmp     @end
    153. @ok:    
    154.         ; Check the received status
    155.         cmp     byte ptr [lpBuf1],'2'; 2** - OK
    156.         jz      @F
    157.     cmp dword ptr [lpBuf1],' 433' ; 334 - Enter Login/Pass
    158.     jz  @F
    159.         cmp     dword ptr [lpBuf1],' 453' ; Accept 354: Start mail input;
    160.         jnz     @err
    161. @@:
    162.         inc     eax ; Result = True
    163.         inc     edi
    164.         mov     byte ptr[edi],0 ; Write the null terminator
    165. @end:
    166.  
    167.         ret        
    168. Recv_DataLF endp
    169. ;===============================================================================
    170. ;===============================================================================
    171. Send_String proc lpStr: DWORD
    172.         ; Get length of the buffer to send to
    173.         invoke  lstrlen, lpStr
    174.         ; In blocking sockets send() blocks until all data hasn't been sent
    175.         ; or error happened (in this case SOCKET_ERROR is returned)
    176.         invoke  send, hSock, lpStr, eax, 0
    177.         ret
    178. Send_String endp
    179. ;===============================================================================
    180.  
    181. start:
    182.  invoke ReadFileFromDisk, addr lszAttach
    183.             mov    lpFileData, eax
    184.            mov    ldFileSiz, ecx
    185.            mov    eax, ldFileSiz
    186.            mov    ecx, 2
    187.            mul    ecx
    188.            invoke VirtualAlloc, 0, eax, 1000h, 40h
    189.            mov    lpBase64Out, eax
    190.            push   lpFileData
    191.            push   ldFileSiz
    192.            push   lpBase64Out
    193.            call   Base64Conv
    194.      ;      invoke lstrlen, lpBase64Out
    195.      ;                           add    ldFullSiz, eax
    196.    ;        add    ldFullSiz, 200
    197.     ;       invoke VirtualAlloc, 0, ldFullSiz, 1000h, 40h
    198.      ;      mov    pMessage, eax
    199.         ;  
    200.        ;               invoke lstrcat, pMessage, addr SecondPartTemplate
    201.        ;    invoke lstrcat, pMessage, lpBase64Out
    202.  
    203.  
    204. invoke  WSAStartup,0101h,addr wsadata
    205. test    eax,eax
    206. jnz @end
    207.  
    208. invoke  socket,AF_INET, SOCK_STREAM, IPPROTO_TCP
    209. cmp     eax, INVALID_SOCKET
    210. je  @end
    211. mov hSock,eax
    212.  
    213. mov sin.sin_family,AF_INET
    214. invoke  htons,25
    215. mov sin.sin_port,ax
    216.  
    217. invoke  gethostbyname,offset Server
    218. mov eax,dword ptr [eax + 12]
    219. mov eax,dword ptr [eax]
    220. mov eax,dword ptr [eax]
    221. mov sin.sin_addr,eax
    222.  
    223. ; соединяемся с сервером
    224. invoke  connect,hSock,addr sin,sizeof sin
    225. test    eax,eax
    226. jnz @cleanup
    227.  
    228. ;получаем приветствие
    229. invoke  Recv_DataLF
    230. test    eax,eax
    231. jz      @cleanup
    232.  
    233. ;формируем свое
    234. invoke  gethostname, addr buf,261
    235. invoke  gethostbyname, addr buf
    236. mov eax,[eax + 12]
    237. mov eax,[eax]
    238. mov eax,[eax]
    239. invoke  inet_ntoa,eax
    240. invoke wsprintf,offset Helo_Buf,offset HELO,eax
    241.  
    242. ;посылаем свое приветствие
    243. invoke  Send_String,addr Helo_Buf
    244. inc eax
    245. jz  @cleanup
    246.  
    247. ;получаем ответ
    248. invoke  Recv_DataLF
    249. test    eax,eax
    250. jz      @cleanup
    251.  
    252. ;посылаем строку аутентификации
    253. invoke  Send_String,offset AUTH
    254. inc eax
    255. jz  @cleanup
    256.  
    257. ;получаем ответ
    258. invoke  Recv_DataLF
    259. test    eax,eax
    260. jz      @cleanup
    261.  
    262. ;посылаем логин
    263. invoke  Send_String,offset Login
    264. inc eax
    265. jz  @cleanup
    266.  
    267. ;получаем ответ
    268. invoke  Recv_DataLF
    269. test    eax,eax
    270. jz      @cleanup
    271.  
    272. ;посылаем пасс
    273. invoke  Send_String,offset Pass
    274. inc eax
    275. jz  @cleanup
    276.  
    277. ;получаем ответ
    278. invoke  Recv_DataLF
    279. test    eax,eax
    280. jz      @cleanup
    281.  
    282. ;MAIL FROM
    283. invoke  Send_String,offset MailFrom
    284. inc eax
    285. jz  @cleanup
    286.  
    287. ;получаем ответ
    288. invoke  Recv_DataLF
    289. test    eax,eax
    290. jz      @cleanup
    291.  
    292. ;RCPT TO
    293. invoke  Send_String,offset MailTo
    294. inc eax
    295. jz  @cleanup
    296.  
    297. ;получаем ответ
    298. invoke  Recv_DataLF
    299. test    eax,eax
    300. jz      @cleanup
    301.  
    302. ;DATA
    303. invoke  Send_String,offset DATA
    304. inc eax
    305. jz  @cleanup
    306.  
    307. ;получаем ответ
    308. invoke  Recv_DataLF
    309. test    eax,eax
    310. jz      @cleanup
    311.  
    312. ;========= посылаем Header ==========
    313. invoke  Send_String,offset Header
    314. inc eax
    315. jz  @cleanup
    316.  
    317. ;посылаем тело письма
    318. invoke  Send_String,offset Message
    319. inc eax
    320. jz  @cleanup
    321.  
    322. invoke  Send_String,offset msg_my
    323. inc eax
    324. jz  @cleanup
    325.  
    326. ;--------------------------------
    327. invoke  Send_String,offset ENDD
    328. inc eax
    329. jz  @cleanup
    330.  
    331. ;получаем ответ
    332. invoke  Recv_DataLF
    333. test    eax,eax
    334. jz      @cleanup
    335.  
    336. ; завершаем работу с сервером
    337. invoke  Send_String,offset QUIT
    338.  
    339. @cleanup:
    340. invoke  closesocket,hSock
    341. invoke VirtualFree, lpBase64Out, 0, 8000h
    342. @end:
    343. invoke  ExitProcess,0
    344. ret
    345.  
    346. Base64Conv      proc near          
    347.  
    348. var_14          = dword ptr -14h
    349. var_10          = dword ptr -10h
    350. var_A           = byte ptr -0Ah
    351. var_9           = byte ptr -9
    352. var_8           = dword ptr -8
    353. var_4           = dword ptr -4
    354. arg_0           = dword ptr  8
    355. arg_4           = dword ptr  0Ch
    356. arg_8           = dword ptr  10h
    357.  
    358.                 push    ebp
    359.                 mov     ebp, esp
    360.                 add     esp, 0FFFFFFECh
    361.                 push    edi
    362.                 push    esi
    363.                 push    ebx          
    364.                 xor     eax, eax
    365.                 mov     [ebp+var_4], eax
    366.                 mov     [ebp+var_8], eax
    367.                 mov     [ebp+var_9], al
    368.                 mov     [ebp+var_A], al
    369.                 mov     [ebp+var_10], eax
    370.                 mov     [ebp+var_14], eax                
    371.                 mov     esi, [ebp+arg_0]
    372.                 mov     edi, esi
    373.                 jmp     loc_40279E
    374. loc_40269A:                          
    375.                 mov     eax, [ebp+arg_4]
    376.                 sub     eax, [ebp+var_4]
    377.                 cmp     eax, 39h
    378.                 jbe     short loc_4026AA
    379.                 mov     eax, 39h
    380. loc_4026AA:                          
    381.                 mov     [ebp+var_10], eax
    382.                 or      eax, eax
    383.                 jnz     short loc_4026B6
    384.                 jmp     loc_4027A6
    385. loc_4026B6:                          
    386.                 mov     ecx, [ebp+arg_8]
    387.                 add     ecx, [ebp+var_4]
    388.                 mov     [ebp+var_14], ecx
    389.                 test    edi, edi
    390.                 jbe     loc_40278E
    391.                 mov     eax, 1
    392. loc_4026CC:                          
    393.                 mov     bl, [eax+ecx-1]
    394.                 and     [ebp+var_A], 0
    395.                 cmp     eax, edi
    396.                 jnb     short loc_4026DE
    397.                 mov     dl, [eax+ecx]
    398.                 mov     [ebp+var_A], dl
    399. loc_4026DE:                          
    400.                 lea     edx, [eax+1]
    401.                 and     [ebp+var_9], 0
    402.                 cmp     edx, edi
    403.                 jnb     short loc_4026F0
    404.                 mov     cl, [eax+ecx+1]
    405.                 mov     [ebp+var_9], cl
    406. loc_4026F0:                          
    407.                 movzx   ecx, bl
    408.                 mov     ebx, [ebp+var_8]
    409.                 mov     edx, ecx
    410.                 and     ecx, 3
    411.                 shr     edx, 2
    412.                 shl     ecx, 4
    413.                 mov     dl, byte ptr Base64Date[edx]
    414.                 mov     [ebx+esi], dl
    415.                 movzx   edx, [ebp+var_A]
    416.                 inc     [ebp+var_8]
    417.                 mov     edi, [ebp+var_8]
    418.                 mov     ebx, edx
    419.                 shr     ebx, 4
    420.                 or      ecx, ebx
    421.                 mov     cl, byte ptr Base64Date[ecx]
    422.                 mov     [esi+edi], cl
    423.                 mov     edi, [ebp+var_10]
    424.                 inc     [ebp+var_8]
    425.                 mov     ecx, [ebp+var_8]
    426.                 mov     bl, [ebp+var_9]
    427.                 cmp     eax, edi
    428.                 jnb     short loc_402758
    429.                 and     edx, 0Fh
    430.                 movzx   edi, bl
    431.                 shr     edi, 6
    432.                 shl     edx, 2
    433.                 or      edi, edx
    434.                 mov     dl, byte ptr Base64Date[edi]
    435.                 mov     edi, esi
    436.                 mov     [edi+ecx], dl
    437.                 inc     [ebp+var_8]
    438.                 mov     ecx, [ebp+var_8]
    439.                 mov     edi, [ebp+var_10]
    440.                 jmp     short loc_402762
    441. loc_402758:                            
    442.                 mov     byte ptr [esi+ecx], 3Dh
    443.                 inc     [ebp+var_8]
    444.                 mov     ecx, [ebp+var_8]
    445. loc_402762:                          
    446.                 mov     byte ptr [esi+ecx], 3Dh
    447.                 lea     edx, [eax+1]
    448.                 cmp     edx, edi
    449.                 jnb     short loc_402779
    450.                 and     ebx, 3Fh
    451.                 mov     bl, byte ptr Base64Date[ebx]
    452.                 mov     [esi+ecx], bl
    453. loc_402779:                            
    454.                 inc     [ebp+var_8]
    455.                 add     eax, 3
    456.                 lea     ecx, [eax-1]
    457.                 cmp     ecx, edi
    458.                 jnb     short loc_40278E
    459.                 mov     ecx, [ebp+var_14]
    460.                 jmp     loc_4026CC
    461. loc_40278E:                        
    462.                 add     [ebp+var_4], edi
    463.                 mov     eax, [ebp+var_8]
    464.                 mov     word ptr [esi+eax], 0A0Dh
    465.                 add     [ebp+var_8], 2
    466. loc_40279E:                            
    467.                 or      esi, esi
    468.                 jnz     loc_40269A
    469. loc_4027A6:                            
    470.                 pop     ebx
    471.                 pop     esi
    472.                 pop     edi
    473.                 leave
    474.                 retn    0Ch
    475.  
    476. Base64Conv      endp
    477.  
    478. end start
     
  5. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Здравствуйте. Нужно прибавить 2 числа, переданных через пробел как аргументы коммандной строки и показать результат. Написал код и как всегда где-то ошибся, но где понять не могу...
     
  6. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Помогите пожалуйста...
     
  7. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    В свое время все лабы писал на Сях и сдавал дизасм-листенги.
    Ускоряется процесс в сотни раз. Ежели что (=
     
  8. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    dgs
    Когда не можете найти ошибку, берите в руки отладчик.
    Код (Text):
    1. format  PE CONSOLE
    2. include "win32axp.inc"
    3.  
    4. .data
    5.   _format       db '%d', 10, 0
    6.   _bad_params       db 'bad params', 10, 0
    7.   _bad_params_length    = ($ - 1) - _bad_params ; число символов в строке _bad_params
    8.  
    9.   buffer        rb 10
    10.  
    11.  
    12. .code
    13. start:
    14.     invoke  GetCommandLine
    15.  
    16.     xor ebx, ebx    ; сумма
    17.     xor edi, edi    ; счётчик параметров
    18.     mov esi, eax
    19.   find_command_start:
    20.     lodsb
    21.     cmp al, ' '
    22.     je  find_command_start
    23.     cmp al, '"'
    24.     je  skip_quoted_name
    25.   skip_name:
    26.     lodsb
    27.     cmp al, ' '
    28.     je  find_param
    29.     test    al, al
    30.     jz  all_params
    31.     jmp skip_name
    32.  
    33.   skip_quoted_name:
    34.     lodsb
    35.     cmp al, '"'
    36.     je  find_param
    37.     test    al, al
    38.     jz  all_params
    39.     jmp skip_quoted_name
    40.  
    41.   find_param:
    42.     lodsb
    43.     cmp al, ' '
    44.     je  find_param
    45.     test    al, al
    46.     jz  all_params
    47.     dec esi
    48.     call    get_value
    49.     jc  bad_params  ; если параметр не является десятичным числом без знака, показать сообщение об
    50.  
    51. ошибке
    52.     add ebx, edx
    53.     inc edi
    54.     jmp find_param
    55.  
    56.   all_params:
    57.     cmp edi, 2      ; если число параметров не равно двум, показать сообщение об ошибке
    58.     jne bad_params
    59.  
    60.   print_sum:
    61.     cinvoke wsprintf, buffer, _format, ebx
    62.     mov esi, buffer
    63.     mov ecx, eax
    64.     call    message
    65.     jmp done
    66.  
    67.   bad_params:
    68.     mov esi, _bad_params
    69.     mov ecx, _bad_params_length
    70.     call    message
    71.   done:
    72.     invoke  ExitProcess, 0
    73.  
    74.  
    75. message:
    76.     invoke  WriteFile, <invoke GetStdHandle, STD_OUTPUT_HANDLE>, esi, ecx, 0, 0
    77.     retn
    78.  
    79.  
    80. get_value:
    81.     xor eax, eax
    82.     xor edx, edx
    83.   get_digit:
    84.     lodsb
    85.     cmp al, ' '
    86.     je  value_ok
    87.     test    al, al
    88.     je  value_ok
    89.     sub al, '0'
    90.     jc  invalid_value
    91.     cmp al, 9
    92.     ja  invalid_value
    93.     imul    edx, 10
    94.     jo  invalid_value
    95.     add edx, eax
    96.     jc  invalid_value
    97.     jmp get_digit
    98.   value_ok:
    99.     dec esi
    100.     clc
    101.     retn
    102.   invalid_value:
    103.     stc
    104.     retn
    105.  
    106.  
    107.  
    108. .end start
     
  9. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    deLight
    Да кстати, что-то я не подумал)))
    Ezrah
    Спасибо.
     
  10. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    dgs
    Что бы это сделать, не нужно ни каких wsprintf и команд умножения. Почитайте про двоично-десятичную арифметику (binary-coded decimal). Там все просто, при этом вариант Ezrah можно будет сократить в два раза! Если вечером не буду занят, то накидаю вам код. И если ваш препод не из Нью-Дели, то навряд ли с вариантом Ezrah вы получите хотя бы четверку.
     
  11. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    pashe4ka13
    Ну давайте, сократите :)
     
  12. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
  13. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    pashe4ka13
    Во-первых, работу наверно уже сдали. Во-вторых, обычно требуют не супер-знаний, а кропотливого написания примитивных команд. Про wsprintf да - надо через int 21 :)
     
  14. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Да всё сдал, правда переписал немного. Оценку ещё не знаю...
     
  15. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    valterg
    Да, я понимаю. Дорога ложка к обеду. Но может еще кому-то понадобится, что бы не наступил на те же грабли.
    Не знаю, я ни где не учился, но мне интересна такая методика. На чем она основана?
    Плохо знаю функции МС-ДОС, но в данном случае и они не нужны. ANSII символы цифр "0-9" (соответственно 30h-39h) это обычные неупакованные BCD числа, с которыми можно производить все арифметические действия. Ну разве, что использовать int21 для вывода на экран? Но как мне кажется тогда эта прога будет еще более "тормозной" из-за выполнения на виртуальной машине.
    Первое, что я бы сделал это выкинул из вашего кода секцию .data. Зачем она? Лишний сектор или страница памяти? Ну а дальше постараюсь написать код, о чем я говорил выше, правда немного устал с работы и немного выпил пива :) Но все таки постараюсь.
     
  16. Viktoria

    Viktoria New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2011
    Сообщения:
    1
    у меня задание по цыклам и одномерным масивам
    задание звучит так :
    поменять местами первый и последний положит эл вектора а, ;это я вроде сделала )
    после чего заменить его отрицательные элементы на квадрат их суммы ; вот тут у меня проблемма,как можно возвести в степень элементы? их прийдется пускать по цыклу или как?
    если да,то можете описать момент цыкла?
     
  17. r2max

    r2max Женя

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    40
    Адрес:
    Киев
    Ребят первый раз прошу у Вас помощи по ПАСКАЛЮ))))))
    Либо я тупой, либо ошибка в задании....
    Так как я заочник, я не могу узнать у преподавателей, и по этому оч надеюсь на Вашу помощь...
    Задание http://rghost.ru/24285711
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    r2max
    За бесплатно? И не стыдно?
     
  19. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    и?

    Код (Text):
    1. x=1
    2. y=1
    3. for i=2 to m
    4.  x1=x+y/(i*i)
    5.  y1=y+x/i
    6.  x=x1
    7.  y=y1
    8. next
    9. print x,y
    В каком месте проблема? перевести мой бейсик на паскаль? или сравнить n и m, сделать цикл до наибольшего, а в середине добавить условие - распечатать еще пару чисел, когда i=min(n,m)?
     
  20. r2max

    r2max Женя

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    40
    Адрес:
    Киев
    Дело в том что надо не Хм и Ум , а Хм и Уn