鱼C论坛

 找回密码
 立即注册
查看: 3181|回复: 0

[学习笔记] X86汇编语言-从实模式到保护模式—笔记(5)

[复制链接]
发表于 2017-10-27 19:08:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 兰陵月 于 2017-12-5 21:56 编辑
        ;X86汇编语言-从实模式到保护模式,P112

        ;在16位的处理器上,做加法的指令是add,但它每次只能做8位或16位的加法。
        ;除此之外,还有一个带进位加法指令adc(Add With Carry),它的指令格式
        ;和add一样,目的操作数可以是8位或16位的通用寄存器和内存单元,源操作数
        ;可以是与目的操作数宽度一致的通用寄存器、内存单元和立即数(但目的操作
        ;数和源操作数同为内存单元的除外)。不过,adc指令在执行的时候,除了将目的
        ;操作数和源操作数相加,还要加上当前标志寄存器的CF位。也就是说,视CF位的
        ;状态,还要再加0或者加1.这样一来,用adc指令配合add指令,就可以计算16位
        ;以上的加法。
        ;adc指令对OF、SF、ZF、AF、CF和PF影响视计算结果而定。
        ;现在,请编写一段主引导扇区程序,计算1到1000的累加和,并在屏幕上显示结果。

        ;文件名:P0112-2.asm
        ;文件创建日期:2017-10-27 12:47

          jmp near start

  message db '1+2+...+999+1000='

  start:
          mov ax,0x7c0
          mov ds,ax

          mov ax,0xb800
          mov es,ax

          ;以下为显示message字符串内容
          mov si,message
          mov di,0
          mov cx,start-message

  @show:
          mov al,[si]
          mov [es:di],al
          inc di
          mov byte [es:di],0x07
          inc di
          inc si
          loop @show

          ;求1~1000的和
          xor ax,ax
          xor dx,dx
          mov cx,0x3e8
  @hh:
          add ax,cx
          adc dx,0
          loop @hh

          ;此时,和的高16位在DX中,低16位在AX。
          ;此处偷懒,不考虑除法溢出的问题(不是指除数为0的溢出)
          ;当然本题也不会产生除法溢出问题
          xor cx,cx
          mov ss,cx
          mov sp,cx

          mov bx,10
          xor cx,cx
     @gg:
          inc cx
          div bx
          or dl,0x30
          push dx
          xor dx,dx
          cmp ax,0
          jne @gg

 @show_1:
          pop dx
          mov [es:di],dl
          inc di
          mov byte [es:di],0x07
          inc di
          loop @show_1


          jmp near $

  times 510-($-$) db 0
                   db 0x55,0xaa

最终结果正确!
P0112-2.jpg

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 00:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表