有没有好心人帮忙写写

2401_82370124 2024-12-31 13:02:04

 

 

 

...全文
152 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

哈,我明白了,老赵的代码是用AI写的吧~~~

  • 打赏
  • 举报
回复

老赵,引用你的名言:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

你这么爱调试的人居然不测试一下代码的正确性(代码输入错误都不算了),我居然这么信任你,默认你的代码是正确的~

  • 打赏
  • 举报
回复

我说老赵啊,你的代码都是错的~

  • 打赏
  • 举报
回复

第二题:

        push    ds
        pop     es
        xor     edx, edx
readbuf:
        xor     eax, eax
        mov     ecx, 4
        lodsb
        lea     di, s
        repne   scasb
        jnz     parse_operand
        xor     cx, 3
        xchg    cx, prev_op
        mov     eax, b
        call    fun[ecx * 2]
        mov     b, eax
        xor     edx, edx
        cmp     prev_op, 0
        je      do_output
        jmp     readbuf
parse_operand:
        cmp     al, '0'
        jb      do_output            ; illegal character
        cmp     al, '9'
        ja      do_output            ; illegal character
        sub     al, 48
        mov     ecx, edx
        shl     ecx, 2
        add     edx, ecx
        shl     edx, 1
        add     edx, eax
        jmp     readbuf
fun_add:
        add     eax, edx
        ret
fun_mul:
        mul     edx
        ret
fun_div:
        mov     ecx, edx
        jecxz   do_output            ; divided by 0
        xor     edx, edx
        div     ecx
        ret
赵4老师 01-14
  • 举报
回复
@日立奔腾浪潮微软松下联想 运行100000次,比一下谁速度快?
@赵4老师 你的代码真的不一定快,因为分支太多~
赵4老师 01-14
  • 举报
回复 1
@日立奔腾浪潮微软松下联想 寄存器比较肯定比访问内存查表快
1条回复
  • 打赏
  • 举报
回复

第一题:

        push    cs
        pop     es
        lea     bx, done
        xor     edx, edx
convert4b:
        dec     si
        cmp     si, offset s
        jb      done
        mov     al, [si]
        lea     di, lookup_table
        mov     cx, 22
        repne   scasb
        jnz     done
        mov     al, es:[di + 21]
        sub     byte ptr cs:[bx + 3], 4
        shrd    edx, eax, 4
        jmp     convert4b
lookup_table:
        db      '0123456789ABCDEFabcdef'
        db      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15
done:   shr     edx, 32
        mov     result, edx
  • 打赏
  • 举报
回复

老赵的代码写得太长(“代码不是老二越长越好”),字符串转数字,最简单的方法是查表加移位~

赵4老师 01-10
  • 举报
回复
@日立奔腾浪潮微软松下联想 Talk is cheap, show me the code.
@赵4老师 哈,我就知道你会这么说~
赵4老师 01-02
  • 打赏
  • 举报
回复
    jmp begin

fun_add:
    mov eax,[b]
    add eax,ebx
    mov [b],eax
    ret

fun_mul:
    mov eax,[b]
    mul eax,ebx
    mov [b],eax
    ret

fun_div:
    mov eax,[b]
    xor edx,edx
    div ebx
    mov [b],eax
    ret

fun_over:
    cmp [prev_op],1
    jne over1
    call fun_add
    ret
over1:
    cmp [prev_op],2
    jne over2
    call fun_mul
    ret
over2:
    cmp [prev_op],3
    jne over3
    call fun_div
over3:
    ret

begin:
    xor eax,eax
    mov [b],eax
    xor ebx,ebx
    mov [prev_op],1
    dec si
nextchar:
    int si
    mov al,[si]
    cmp al,0
    je over
    cmp al,'+'
    jne next1
    call fun_over
    mov [b],ebx
    xor ebx,ebx
    mov [prev_op],1
    jmp nextchar
next1:
    cmp al,'*'
    jne next2
    call fun_over
    mov [b],ebx
    xor ebx,ebx
    mov [prev_op],2
    jmp nextchar
next2:
    cmp al,'/'
    jne next3
    call fun_over
    mov [b],ebx
    xor ebx,ebx
    mov [prev_op],3
    jmp nextchar
next3:
    cmp al,'9'
    ja nextchar
    cmp al,'0'
    jb nextchar
    sub al,'0'
    xor ecx,ecx
    mov cl,al
    mov eax,ebx
    mul eax,10
    add eax,ecx
    mov ebx,eax
    jmp nextchar
over:
    call fun_over


赵4老师 2024-12-31
  • 打赏
  • 举报
回复
    mov si,offset s
    mov di,offset result
nextchar0:
    mov al,[si]
    cmp al,0
    je over
    cmp al,'0'
    jb nextchar1
    cmp al,'9'
    jbe digit1
    cmp al,'a'
    jae lower1
    cmp al,'F'
    ja nextchar1
    cmp al,'A'
    jb  nextchar1
    sub al,'A'
    add al,10
    jmp save1
lower1:
    cmp al,'f'
    ja  nextchar1
    sub al,'a'
    add al,10
    jmp save1
digit1:
    sub al,'0'
save1:
    mov bl,al
nextchar1:
    inc si
    mov al,[si]
    cmp al,0
    je over
    cmp al,'0'
    jb nextchar2
    cmp al,'9'
    jbe digit2
    cmp al,'a'
    jae lower2
    cmp al,'F'
    ja nextchar2
    cmp al,'A'
    jb  nextchar2
    sub al,'A'
    add al,10
    jmp save2
lower2:
    cmp al,'f'
    ja  nextchar2
    sub al,'a'
    add al,10
    jmp save2
digit2:
    sub al,'0'
save2:
    mov bh,al
    mov al,bl
    shl al,4
    or  al,bh
    mov [di],al
    inc di
nextchar2:
    inc si
    jmp nextchar0
over:

21,489

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧