DVI无符号数除法指令
指令格式:DIV 源
指令功能:对两个无符号二进制数进行除法操作。源操作数可以是字或字节。
如果源操作数为字节,16位被除数必须放在AX中,8位除数为源操作数,它可以是寄存器或存储单元。相除之后,8位商在AL中,余数在AH中。即
AL ← AX/源(字节)的商
AH ← AX/源(字节)的余数
要是被除数只有8位,必须把它放在AL中,并将AH清0,然后相除。
如果源操作数为字,32位被除数在DX、AX中,其中,DX为高位字,16位除数作源操作数,它可以是寄存器或存储单元。相除之后,AX中存16位商,DX中存16位余数。即
AX ← (DX, AX)/源(字)的商
DX ← (DX,AX)/源(字)的余数
要是被除数只有16位,除数也是16位,则必须将16位被除数送到AX中,再将DX寄存器清0,然后相除。
与被除数和除数一样,商和余数也都为无符号数。DIV指令执行后,所有标志均无定义。
; 以下程序实现 1001 ÷ 100 的结果
assume cs:code, ds:data, ss:stack
data segment
db 256 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start:
mov ax, stack
mov ss, ax
mov sp, 128
mov ax, 1001
mov bl, 100
div bl
mov ax, 4C00H
int 21
code ends
end start
代码执行结果:

; 以下程序实现 100001 ÷ 100 的结果
assume cs:code, ds:data, ss:stack
data segment
dd 100001
dw 1
db 1
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start:
mov ax, stack
mov ss, ax
mov sp, 128
mov ax, data
mov ds, ax
mov ax, ds:[0]
mov dx, ds:[2]
mov bx, 100
div bx
mov ax, 4C00H
int 21
code ends
end start
代码执行结果:

; 以下程序使用 word ptr 实现 1232131 ÷ 100 的结果
assume cs:code, ds:data, ss:stack
data segment
dd 1232131 ; dd 占用4个字节
dw 100 ; dw 占用 2个字节
db 1 ; db 占用一个字节
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start:
mov ax, stack
mov ss, ax
mov sp, 128
mov ax, data
mov ds, ax
mov ax, ds:[0]
mov dx, ds:[2]
div word ptr ds:[4]
mov ax, 4C00H
int 21
code ends
end start

总结:
除数:8bit或16bit 存在内存单元中或者寄存器中
被除数:存放在AX或者 AX和DX中
如果除数为8bit,被除数则为16bit,存放在AX中
如果除数为16bit,被除数则为32bit,AX存放低16bit,DX存放高16bit
结果:如果除数为8bit,则AL 存商,AH存放余数
如果除数为16bit,则AX存放商,DX存放余数
MUL 无符号数乘法指令
; 以下程序实现 200 * 29 的结果
assume cs:code, ds:data, ss:stack
data segment
db 256 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov al, 200
mov bl, 29
mul bl
mov ax, 4C00H
int 21H
code ends
end start


; 以下程序实现 200 * 50 的结果
assume cs:code, ds:data, ss:stack
data segment
db 50
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov bx, data
mov ds, bx
mov al, 200
mul byte ptr ds:[0]
mov ax, 4C00H
int 21H
code ends
end start


; 以下程序实现 200 * 12345 的结果
assume cs:code, ds:data, ss:stack
data segment
db 256 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov bx, data
mov ds, bx
mov ax, 200
mov bx, 12345
mul bx
mov ax, 4C00H
int 21H
code ends
end start


; 以下程序实现 54321 * 200 的结果
assume cs:code, ds:data, ss:stack
data segment
dw 54321
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov bx, data
mov ds, bx
mov ax, 200
mul word ptr ds:[0]
mov ax, 4C00H
int 21H
code ends
end start


我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来
在添加一些空格以使代码更具可读性时(与上面的代码对齐),我遇到了这个:classCdefx42endendm=C.new现在这将给出“错误数量的参数”:m.x*m.x这将给出“语法错误,意外的tSTAR,期待$end”:2/m.x*m.x这里的解析器到底发生了什么?我使用Ruby1.9.2和2.1.5进行了测试。 最佳答案 *用于运算符(42*42)和参数解包(myfun*[42,42])。当你这样做时:m.x*m.x2/m.x*m.xRuby将此解释为参数解包,而不是*运算符(即乘法)。如果您不熟悉它,参数解包(有时也称为“spl
有没有人用ruby解决这个问题:假设我们有:a=8.1999999我们想将它四舍五入为2位小数,即8.20,然后乘以1,000,000得到8,200,000我们是这样做的;(a.round(2)*1000000).to_i但是我们得到的是8199999,为什么?奇怪的是,如果我们乘以1000、100000或10000000而不是1000000,我们会得到正确的结果。有人知道为什么吗?我们正在使用ruby1.9.2并尝试使用1.9.3。谢谢! 最佳答案 每当你在计算中得到时髦的数字时使用bigdecimalrequire'bi
关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby有很大不同。由于我与ruby之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?
如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback
在我的双语Rails4应用程序中,我有一个像这样的LocalesController:classLocalesController用户可以通过此表单更改其语言环境:deflocale_switcherform_tagurl_for(:controller=>'locales',:action=>'change_locale'),:method=>'get',:id=>'locale_switcher'doselect_tag'set_locale',options_for_select(LANGUAGES,I18n.locale.to_s)end这有效。但是,目前用户无法通过URL更改
我使用Ruby编程已经有一段时间了,现在只使用Ruby的标准MRI实现,但我一直对我经常听到的其他实现感到好奇。前几天我在读有关Rubinius的文章,这是一个用Ruby编写的Ruby解释器。我试着在不同的地方查找它,但我很难弄清楚这样的东西到底是如何工作的。我在编译器或语言编写方面从来没有太多经验,但我真的很想弄明白。一门语言究竟如何才能被自己解释?编译中是否有一个我不明白这有意义的基本步骤?有人可以像我是个白痴一样向我解释这个吗(因为无论如何这都不会太离谱) 最佳答案 它比你想象的要简单。Rubinius并非100%用Ruby编