汇编语言编程

Craze1995 2015-11-01 07:17:22
1.AL=3DH,将AL内容以16进制数据显示
2.BL=05H,CL=08H,显示二者之间的大数
用汇编语言怎么编写
...全文
316 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
whoozit 2015-12-18
  • 打赏
  • 举报
回复
哦,对了,函数开头、结尾关于 bp、sp 的处理可以删掉的——这两个函数都没用到局部变量,我这是习惯性的加上了。
whoozit 2015-12-18
  • 打赏
  • 举报
回复
有了显示数字,第二个问题就简单了,就是一个 cmp 然后 call PrintHex:
; ----------------------------------------------------------------------------------------
; 函数功能:找大数
; 入口参数:bl = 数据 1,cl = 数据 2
; 出口参数:无
PrintHex:
    push bp
    mov bp, sp
 
    push eax
    xor eax, eax

    movzx eax, bl
    cmp bl, cl
    ja .Print
    movzx eax, cl
.Print:
    call PrintHex
    
.Return:
    pop eax

    mov sp, bp
    pop bp
    ret
whoozit 2015-12-18
  • 打赏
  • 举报
回复
先回答第一个16 进制显示数的问题,直接写一个函数显示 32 位内的的 16 进制数: 1、计算办法都一样,你直接照抄就好。 2、显示的办法根据环境多种多样,我这里用的 bios 中断。
; ----------------------------------------------------------------------------------------
; 函数功能:以十六进制显示 32 位整数字符形式
; 入口参数:eax = 数据
; 出口参数:无
PrintHex:
    push bp
    mov bp, sp
 
    push edx
    push ecx
    push eax
 
    push dword 0
    push dword ' '
 
    ; 求余,把对应的数字转换成 ASCII 码,再压入栈
    mov ecx, 16
.Rem:
    xor edx, edx
    div ecx
    cmp edx, 9
    jg .Hex
    add edx, '0'                            ;  余数 0 - 9 转成 ASCII 码
    jmp .Push
.Hex:
    add edx, 'A' - 10                       ;  余数 10 - 15 转成 ASCII 码
.Push:
    push edx
    cmp eax, 0
    jnz .Rem
 
    push dword 'x'                          ; 16 进制数以 0x 前缀表示
    push dword '0'
 
    mov ah, 0x0E
.Print:
    pop ecx
    jcxz .Return
    mov al, cl
    int 0x10
    jmp .Print
 
.Return:
    pop eax
    pop ecx
    pop edx
 
    mov sp, bp
    pop bp
    ret
yealien 2015-12-16
  • 打赏
  • 举报
回复
新来的,看看先.
Craze1995 2015-11-01
  • 打赏
  • 举报
回复
麻烦写出详细的语句,刚刚学习不会写

21,459

社区成员

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

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