鱼C论坛

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

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

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

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

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

x
本帖最后由 兰陵月 于 2017-12-5 21:56 编辑

  1.         ;X86汇编语言-从实模式到保护模式,P112

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

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

  14.           jmp near start

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

  16.   start:
  17.           mov ax,0x7c0
  18.           mov ds,ax

  19.           mov ax,0xb800
  20.           mov es,ax

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

  25.   @show:
  26.           mov al,[si]
  27.           mov [es:di],al
  28.           inc di
  29.           mov byte [es:di],0x07
  30.           inc di
  31.           inc si
  32.           loop @show

  33.           ;求1~1000的和
  34.           xor ax,ax
  35.           xor dx,dx
  36.           mov cx,0x3e8
  37.   @hh:
  38.           add ax,cx
  39.           adc dx,0
  40.           loop @hh

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

  47.           mov bx,10
  48.           xor cx,cx
  49.      @gg:
  50.           inc cx
  51.           div bx
  52.           or dl,0x30
  53.           push dx
  54.           xor dx,dx
  55.           cmp ax,0
  56.           jne @gg

  57. @show_1:
  58.           pop dx
  59.           mov [es:di],dl
  60.           inc di
  61.           mov byte [es:di],0x07
  62.           inc di
  63.           loop @show_1


  64.           jmp near $

  65.   times 510-($-$) db 0
  66.                    db 0x55,0xaa
复制代码


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

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 19:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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