アプリ版:「スタンプのみでお礼する」機能のリリースについて

    mov cx、4
    xor bx,bx
countb:mov di,mask
    and di,ax
    add bx,[nbit+bi]
    shr ax,4
    loop countb
    
mask: db 0x00,0x01,0x01,0x02,0x01,0x02,0x02,0x03・・・0x04

というプログラムがありました。これは1ワード内にonとなっているビット数を求める問題らしいのですが、テーブルという物を使っているようです。
このテーブルという物がよくわかりません。さらにこのプログラムではmov di maskで何をやっているのだか。さらにその後のandやaddも何をしているのかよくわかりません。さらに、この問題とは関係がないのですが、アドレスベクターテーブルという物もよくわかりません。これはswitch文の説明の後にあったのですけど。
どうか御教授ください。

A 回答 (2件)

プログラムに間違いがあるような気がします。


目を皿のようにして、
確認してから質問していただけませんか。
課題か何かですか?
    • good
    • 0

答えは、n=0なら0bit、n=1=1bit、


2=1bit, 3=2bit, 4=1bit, 5=2bit, 6=2bit, 7=3bitですから、
maskと名付けられたテーブルに答えを用意しておいて、
それを参照するというプログラムです。
それだけだと、テーブルサイズが65536バイトになるため、
4分割してテーブルサイズを16バイトにしたのかな。
プログラムは微妙に間違っているし、
テーブルを省略してあったりするので確信はないです。
    • good
    • 0
この回答へのお礼

ありがとうございました。この先生は間違いの多い先生なので、また例によって、間違った物と思われます。この前アセンブラのテストがあって、テーブルを使う問題が出ましたが、なんとか乗り切りました。

お礼日時:2001/07/01 21:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!